为什么调整大小会导致图像尺寸减小

曼达·乔加莱卡(Mandar Jogalekar)

我继承了一个可以在宽度和高度上调整图像大小的代码。我还观察到的是,即使图像的高度和宽度增加,它也会减小文件大小。这是保存图像的调整大小代码和调用函数代码

例如,这可能会更好地解释。我的原始图像为709 * 653像素,文件大小为670 kb

调整大小后,应为1000 * 921,但预期大小为176 kb

         Image  orgImage = Image.FromFile(originalimagepath);            
        //resizes image using below function
        transformedImage = ImageUtils.resizeImage(orgImage, Settings.MaxLargeImage);
        memstrImage = new MemoryStream();

        //saves image to memorystream which is in turn saved in destination as resized image.  
        transformedImage.Save(memstrImage,ImageFormat.Jpeg);

public static Image resizeImage(Image imgToResize, int resizeType)
{
    //resizetype is maximum resize width I want image to take.
    int height = imgToResize.Height;
    int width = imgToResize.Width;
    float ratio = 0;

    Size size = new Size();

    if (height >= width)
    {
        ratio = ((float)resizeType / (float)height);
    }
    else
    {
        ratio = ((float)resizeType / (float)width);
    }

    size.Height = Convert.ToInt32((float)ratio * (float)imgToResize.Height);
    size.Width = Convert.ToInt32((float)ratio * (float)imgToResize.Width);

    int sourceWidth = imgToResize.Width;
    int sourceHeight = imgToResize.Height;

    float nPercent = 0;
    float nPercentW = 0;
    float nPercentH = 0;

    nPercentW = ((float)size.Width / (float)sourceWidth);
    nPercentH = ((float)size.Height / (float)sourceHeight);

    if (nPercentH < nPercentW)
        nPercent = nPercentH;
    else
        nPercent = nPercentW;

    int destHeight = Convert.ToInt32(sourceHeight * nPercent);
    int destWidth = Convert.ToInt32(sourceWidth * nPercent);

    Bitmap b = new Bitmap(destWidth, destHeight);
    Graphics g = Graphics.FromImage((Image)b);
    g.CompositingQuality = CompositingQuality.HighQuality;            
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
    g.PixelOffsetMode = PixelOffsetMode.HighQuality;
    g.SmoothingMode = SmoothingMode.HighQuality;

    g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
    g.Dispose();

    return (Image)b;
}

我认为并且可能会遇到纵横比不高的问题,但是是否建议保持原样?或者在图像高度和宽度增加时理想地增加文件大小是否合乎逻辑?

对于这个问题,我想在高度和宽度增加时增加文件大小,但是欢迎最佳实践建议。

有什么建议?

数据库

您正在将调整大小后的图像保存为Jpeg格式。Jpeg是一种“有损”格式,这意味着,为了节省空间,所保存的图像仅是内存中位图的近似值,其选择方式是使它在人眼看来与原始图像“接近”。如果您只是Image.Save()用来保存位图,那么根据这篇文章,“存储质量”被认为是75:Image.Save()对jpeg文件使用什么质量等级?(无论如何Image.Save(),Jpeg格式的质量都没有记录。)

因此,如果调整位图的大小并将其保存到Jpeg,则由于压缩,生成的文件可能小于原始文件,也可能大于原始文件,而与尺寸变化无关。(尽管尺寸的变化最终将主导任何压缩问题,因为位图的原始尺寸随像素尺寸的缩放而平方增加。)

如果要尝试在保存JPG时质量设置如何影响文件大小,可以使用以下方法:

    public static void SaveJpegWithSpecifiedQuality(this Image image, string filename, int quality)
    {
        // http://msdn.microsoft.com/en-us/library/ms533844%28v=vs.85%29.aspx
        // A quality level of 0 corresponds to the greatest compression, and a quality level of 100 corresponds to the least compression.
        if (quality < 0 || quality > 100)
        {
            throw new ArgumentOutOfRangeException("quality");
        }

        System.Drawing.Imaging.Encoder qualityEncoder = System.Drawing.Imaging.Encoder.Quality;
        EncoderParameters encoderParams = new EncoderParameters(1);
        EncoderParameter encoderParam = new EncoderParameter(qualityEncoder, (long)quality);
        encoderParams.Param[0] = encoderParam;

        image.Save(filename, GetEncoder(ImageFormat.Jpeg), encoderParams);
    }

    private static ImageCodecInfo GetEncoder(ImageFormat format)
    {
        ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
        foreach (ImageCodecInfo codec in codecs)
        {
            if (codec.FormatID == format.Guid)
            {
                return codec;
            }
        }
        return null;
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么动态调整字符串大小会导致崩溃?

来自分类Dev

调整窗口大小会导致文本下推图像

来自分类Dev

调整大小会导致错误?

来自分类Dev

调整大小会导致错误?

来自分类Dev

为什么在Pillow-python中调整图像大小会删除Image.format?

来自分类Dev

为什么在OpenCv中调整图像大小会减少相机校准的重投影误差?

来自分类Dev

为什么输出向量的大小会导致分配?

来自分类Dev

为什么输出向量的大小会导致分配?

来自分类Dev

为什么调整浏览器/客户端图像的大小会带来如此大的性能影响?

来自分类Dev

图像调整大小会导致文件大小比原始C#大得多

来自分类Dev

高度检查调整大小会导致滞后

来自分类Dev

图像调整大小功能可减小尺寸,但增加文件大小

来自分类Dev

减小Java中同步块的大小会意外损坏我的ArrayList,为什么会这样?

来自分类Dev

为什么使用偏移量密码加密后文件大小会减小?

来自分类Dev

为什么有时候添加更多文本后Word文档的大小会减小?

来自分类Dev

为什么 css 背景大小会旋转图像?

来自分类Dev

为什么请plt.savefig减小图像的原始大小?

来自分类Dev

为什么srcset调整图像大小?

来自分类Dev

为什么减小渲染器的大小会抵消我的点击事件-如何解决此问题

来自分类Dev

在 UIScrollView 中调整多行 UILabel 的大小会中断滚动。为什么?

来自分类Dev

为什么将Imagemagick或GraphicsMagick调整为较小尺寸时会增加我的PNG图像的MB大小?

来自分类Dev

调整向量的向量大小会导致段错误

来自分类Dev

调整HighCharts图表的大小会导致最大Y值更改

来自分类Dev

调整二维char数组的大小会导致异常

来自分类Dev

动态调整矩阵大小会导致分段错误

来自分类Dev

调整网页大小会导致网站添加白色背景溢出

来自分类Dev

调整图像内容的大小,但保持图像尺寸

来自分类Dev

反转颜色后,为什么1bpp PNG图像文件大小会增加?

来自分类Dev

调整图像大小会降低分辨率

Related 相关文章

  1. 1

    为什么动态调整字符串大小会导致崩溃?

  2. 2

    调整窗口大小会导致文本下推图像

  3. 3

    调整大小会导致错误?

  4. 4

    调整大小会导致错误?

  5. 5

    为什么在Pillow-python中调整图像大小会删除Image.format?

  6. 6

    为什么在OpenCv中调整图像大小会减少相机校准的重投影误差?

  7. 7

    为什么输出向量的大小会导致分配?

  8. 8

    为什么输出向量的大小会导致分配?

  9. 9

    为什么调整浏览器/客户端图像的大小会带来如此大的性能影响?

  10. 10

    图像调整大小会导致文件大小比原始C#大得多

  11. 11

    高度检查调整大小会导致滞后

  12. 12

    图像调整大小功能可减小尺寸,但增加文件大小

  13. 13

    减小Java中同步块的大小会意外损坏我的ArrayList,为什么会这样?

  14. 14

    为什么使用偏移量密码加密后文件大小会减小?

  15. 15

    为什么有时候添加更多文本后Word文档的大小会减小?

  16. 16

    为什么 css 背景大小会旋转图像?

  17. 17

    为什么请plt.savefig减小图像的原始大小?

  18. 18

    为什么srcset调整图像大小?

  19. 19

    为什么减小渲染器的大小会抵消我的点击事件-如何解决此问题

  20. 20

    在 UIScrollView 中调整多行 UILabel 的大小会中断滚动。为什么?

  21. 21

    为什么将Imagemagick或GraphicsMagick调整为较小尺寸时会增加我的PNG图像的MB大小?

  22. 22

    调整向量的向量大小会导致段错误

  23. 23

    调整HighCharts图表的大小会导致最大Y值更改

  24. 24

    调整二维char数组的大小会导致异常

  25. 25

    动态调整矩阵大小会导致分段错误

  26. 26

    调整网页大小会导致网站添加白色背景溢出

  27. 27

    调整图像内容的大小,但保持图像尺寸

  28. 28

    反转颜色后,为什么1bpp PNG图像文件大小会增加?

  29. 29

    调整图像大小会降低分辨率

热门标签

归档