Как изменить разрешение (DPI) изображения? - PullRequest
24 голосов
/ 13 декабря 2010

У меня есть изображение JPEG с разрешением 72 дюйма. Я хочу изменить 72 dpi на 300 dpi.

Как изменить разрешение изображений JPEG с помощью C #?

Ответы [ 5 ]

56 голосов
/ 13 декабря 2010

Вы должны скопировать биты в новое изображение с целевым разрешением, например:

    using (Bitmap bitmap = (Bitmap)Image.FromFile("file.jpg"))
    {
        using (Bitmap newBitmap = new Bitmap(bitmap))
        {
            newBitmap.SetResolution(300, 300);
            newBitmap.Save("file300.jpg", ImageFormat.Jpeg);
        }
    }
9 голосов
/ 13 декабря 2010

В этой статье говорится об изменении данных EXIF ​​ без повторного сохранения / повторного сжатия (и, таким образом, потери информации - фактически используется «трюк»; быть более прямыми библиотеками) требуется для подхода SetResolution. Это было найдено при быстром поиске в Google, но я хотел отметить, что все, что вам нужно , нужно , чтобы изменить сохраненные данные EXIF.

Также: .NET lib для модификации EXIF ​​ и еще один ТАК вопрос . Google владеет, когда вы знаете хорошие условия поиска.

4 голосов
/ 13 декабря 2010

Это просто вопрос увеличения ширины и высоты изображения на правильное соотношение.Не все форматы изображений поддерживают метатег DPI, и когда они это делают, все, что вам нужно сделать для графического программного обеспечения, это разделить изображение на предоставленное соотношение.

Например, если вы экспортируете изображение с разрешением 300 точек на дюйм из Photoshopдля JPEG изображение будет выглядеть очень большим при просмотре в программном обеспечении для просмотра изображений.Это связано с тем, что информация DPI не поддерживается в формате JPEG и отбрасывается при сохранении.Это означает, что ваша программа просмотра изображений не знает, на какой коэффициент делить изображение, и вместо этого отображает изображение с соотношением 1: 1.

Чтобы получить коэффициент, на который необходимо масштабировать изображение, см. Код ниже,Просто помните, что будет растягивать изображение, как в Photoshop.По сути, вы в четыре раза увеличиваете размер изображения, поэтому оно растягивается и может создавать артефакты.

Псевдокод

ratio = 300.0 / 72.0   // 4.167
image.width * ratio
image.height * ratio
0 голосов
/ 20 января 2016

Этот код с использованием слияния и преобразования 200 дБи

  static void Main(string[] args)
        { Path string Outputpath = @"C:\Users\MDASARATHAN\Desktop\TX_HARDIN_10-01-2016_K";

            string[] TotalFiles = Directory.GetFiles(Outputpath, "*.tif", SearchOption.AllDirectories);
            foreach (string filename in TotalFiles)
            {

                Bitmap bitmap = (Bitmap)Image.FromFile(filename);

                string ExportFilename = string.Empty;
                int Pagecount = 0;
                bool bFirstImage = true;
                bitmap.SetResolution(200, 200);

                ExportFilename = Path.GetDirectoryName(filename) + "\\" + Path.GetFileName(filename)+"f";
                MemoryStream byteStream = new MemoryStream();
                Pagecount = bitmap.GetFrameCount(FrameDimension.Page);

                if (bFirstImage)
                {
                    bitmap.Save(byteStream, ImageFormat.Tiff);
                    bFirstImage = false;
                } Image tiff = Image.FromStream(byteStream);
                ImageCodecInfo encoderInfo = ImageCodecInfo.GetImageEncoders().First(i => i.MimeType == "image/tiff");
                EncoderParameters encoderParams = new EncoderParameters(2);
                EncoderParameter parameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionCCITT4);
                encoderParams.Param[0] = parameter;
                parameter = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.MultiFrame);
                encoderParams.Param[1] = parameter;
              //  bitmap.Dispose();
                try
                {

                    tiff.Save(ExportFilename, encoderInfo, encoderParams);
                }
                catch (Exception ex)
                {

                }
                EncoderParameters EncoderParams = new EncoderParameters(2);
                EncoderParameter SaveEncodeParam = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage);
                EncoderParameter CompressionEncodeParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionCCITT4);
                EncoderParams.Param[0] = CompressionEncodeParam;
                EncoderParams.Param[1] = SaveEncodeParam;
                if (bFirstImage == false)
                {

                    for (int i = 1; i < Pagecount; i++)
                    {

                            //bitmap = (Bitmap)Image.FromFile(filenames);
                            byteStream = new MemoryStream();
                            bitmap.SelectActiveFrame(FrameDimension.Page, i);
                            bitmap.Save(byteStream, ImageFormat.Tiff);
                            bitmap.SetResolution(200, 200);
                            tiff.SaveAdd(bitmap, EncoderParams);

                    }

                } SaveEncodeParam = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.Flush);
                EncoderParams = new EncoderParameters(1);
                EncoderParams.Param[0] = SaveEncodeParam;
                tiff.SaveAdd(EncoderParams);
                tiff.Dispose();
                bitmap.Dispose();
                File.Delete(filename);

            }


        }
0 голосов
/ 21 декабря 2012

DPI не следует хранить в файле растрового изображения, так как большинство источников данных для растровых изображений делают его бессмысленным.

Растровое изображение сохраняется в виде пикселей. Пиксели не имеют собственного размера в любом отношении. DPI имеет значение только во время рендеринга - будь то монитор, принтер или автоматическая вышивка крестиком.

Растровое изображение с разрешением 800x1000 пикселей, напечатанное с разрешением 100 т / д, превращается в красивую фотографию 8x10 ". При печати с разрешением 200 т / д растровое изображение EXACT SAME превращается в фотографию 4x5".

Захват изображения с помощью цифровой камеры, и что означает DPI? Это, конечно, не размер области, сфокусированной на CCD-томографе, - это зависит от расстояния, и НАСА возвращает изображения галактик, которые имеют ширину 100 000 световых лет и 2 миллиона световых лет друг от друга, в том же поле зрения, какого рода DPI вы получаете от ТО информации?

Не становитесь жертвой идеи DPI растрового изображения - это ошибка. Растровое изображение не имеет физических размеров (за исключением нескольких микрометров места в оперативной памяти или на жестком диске). Это только отображаемое изображение или напечатанное изображение, которое имеет физический размер в дюймах, миллиметрах или фарлонгах.

...