Resimleri Kare Haline Getirme

Resimleri tek tek veya klasör halinde kare haline getirmek için basit bir proje.

Resim dosyalarını dışına çerçeve ekleyerek aynı genişlik ve yükseklikte (kare formatında) olmasını sağlayabilirsiniz.

Projenin referanslar kısmından (References) System.Drawing kütüphanesini dahil etmeniz gerekebilir.

Herhangi bir yerde komut satırında (cmd.exe): set PATH=C:ProjeDizinibinDebug;%PATH% şeklinde PATH değişkenine geçici olarak ekleyerek; MakeSquare "Orijinal Dosyaların Bulunduğu Klasör" "Yeni Klasör" şeklinde kullanabilirsiniz.

PATH değişkenine dilerseniz kalıcı olarak da ekleyebilirsiniz.

Tek bir dosya için; MakeSquare dosya.jpg yeni_dosya.jpg şeklinde de kullanılabilir.

Varsayılan olarak arkaplanı beyaz renkle doldurur; graphics.Clear(Color.White). Bu kısmı ihtiyacınıza göre değiştirebilirsiniz.

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.Drawing.Drawing2D;

namespace MakeSquare
{
    class Program
    {
        static void MakeSquare(string inputFile, string outputFile)
        {
            try
            {
                Console.WriteLine("[PRCS] {0}", inputFile);

                Image image = Image.FromFile(inputFile);

                if (image.Width == image.Height)
                {
                    Console.WriteLine("[SKIP] Image size is already a square {0}x{1}", image.Width, image.Height);
                }
                else
                {
                    int width = image.Width, height = image.Height;
                    int squareSize = image.Width > image.Height ? image.Width : image.Height;

                    Bitmap bitmap = new Bitmap(squareSize, squareSize);

                    Graphics graphics = Graphics.FromImage(bitmap);
                    graphics.CompositingQuality = CompositingQuality.HighQuality;
                    graphics.SmoothingMode = SmoothingMode.HighQuality;
                    graphics.Clear(Color.White);

                    int x = squareSize / 2 - width / 2, y = squareSize / 2 - height / 2;
                    graphics.DrawImage(image, x, y);

                    bitmap.Save(outputFile);

                    graphics.Dispose();
                    bitmap.Dispose();

                    Console.WriteLine(">----> {0}", outputFile);
                }
            }
            catch
            {
                Console.WriteLine("[ERROR] This file is not an image file!");
            }
        }

        static void Main(string[] args)
        {
            if (args.Length != 2)
            {
                Console.WriteLine("Please enter input folder and output folder in order.");
                Console.WriteLine("Usage: MakeSquare input_file output_file");
                Console.WriteLine("Or: MakeSquare input_folder output_folder");
            }
            else
            {
                string inputPath = args[0];
                string outputPath = args[1];

                if (Directory.Exists(inputPath))
                {
                    if (!Directory.Exists(outputPath))
                    {
                        Console.WriteLine("Given output path is not a directory. First create it!");
                    }
                    else
                    {
                        foreach (string inputFile in Directory.GetFiles(inputPath))
                        {
                            string ext = Path.GetExtension(inputFile).ToUpper();

                            if (new string[] { ".JPG", ".PNG", ".JPEG", ".BMP" }.Contains(ext))
                            {
                                string outputFile = outputPath + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(inputFile) + ".jpg";
                                MakeSquare(inputFile, outputFile);
                            }
                            else
                            {
                                Console.WriteLine("[SKIP] {0}", inputFile);
                            }
                        }
                    }
                }
                else if (File.Exists(inputPath))
                {
                    if (File.Exists(outputPath))
                    {
                        Console.Write("Output file already exists. Overwrite it? [Y/n]: ");

                        if (Console.ReadLine().ToUpper() == "Y")
                        {
                            MakeSquare(inputPath, outputPath);
                        }
                    }
                    else
                    {
                        MakeSquare(inputPath, outputPath);
                    }
                }
                else
                {
                    Console.WriteLine("Given input path is not a file or directory!");
                }
            }
        }
    }
}

 

Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Yukarı Git