.NET保存jpeg与加载它的质量相同 [英] .NET Saving jpeg with the same quality as it was loaded

查看:176
本文介绍了.NET保存jpeg与加载它的质量相同的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个大炮数码相机,我设置它以超细的质量拍摄照片,它输出一个3千万的.jpg文件。
如果我在ASP.NET加载它(这是有用的,改变它的dpi分辨率或裁剪它或whaterver)

I have a cannon digital camera and I set it to take pictures with superfine quality and it outputs a .jpg file 3 mega in size. If I load it like this in ASP.NET(this is useful to change it's dpi resolution or crop it or whaterver)

imgPicture = Image.FromFile(Config.WorkDirectory + this.TempPhotoName);
bmpPicture = new Bitmap(imgPicture);

,然后按如下方式保存:

and then I save it again like this:

bmpModified.Save(Config.WorkDirectory + this.TempPhotoName,System.Drawing.Imaging.ImageFormat.Jpeg);

它会输出大小只有700KB左右的jpg。

it outputs a jpg that is only 700KB or so in size. There is a loss of quality.

我也尝试过这样保存:

bmpPicture.Save(Config.WorkDirectory + this.TempPhotoName, codecJpeg, encparams);

其中codecJpeg是

where codecJpeg is

ImageCodecInfo codecJpeg = this.getEncoderInfo("image/jpeg");


    private ImageCodecInfo getEncoderInfo(string mimeType)
    {
        // Get image codecs for all image formats
        ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();

        // Find the correct image codec
        for (int i = 0; i < codecs.Length; i++)
            if (codecs[i].MimeType == mimeType)
                return codecs[i];
        return null;
    }

和encparams:

and encparams:

EncoderParameters encparams = new EncoderParameters(1);
encparams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 97L);

这样大小(我怀疑质量也是如此),但我输入质量

This way the size(and I suspect also the quality) is maintained but I am inputing the quality by hand.

我想问:

是否有一种方法可以保存与

Is there a way to save the image with the same quality as it was loaded without hardcoding the quality value?

推荐答案

所以听起来你知道如何设置质量,你真的只需要知道如何从原始图像中获取质量。

So it sounds like you know how to set the quality, you really just need to know how to fetch the quality from the original image?

我怀疑 Image.PropertyItems 是您的朋友,如果质量是在元数据开始。 (我不知道JPEG编码器中是否有一个标准的质量标准。)

I suspect that Image.PropertyItems is your friend, if the quality is in the metadata to start with. (I don't know if there's even a standard scale for quality within JPEG encoders.)

编辑:我刚刚检查,一个jpeg我下载没有有任何质量的标签。

I've just checked, and a jpeg I downloaded didn't have any tags for quality.

一个选项可能是找出文件的大小应该有大致相同的质量,然后保存几次,做一个二分搜索,找出最合适的质量。 Icky,但它可能只是工作。

One option might be to work out how big the file should end up to have roughly the same quality, and then save it several times, doing a binary search to work out the most appropriate quality. Icky, but it might just work.

我有一个偷偷的怀疑,不是只是保留原始的质量设置,虽然我没有很好的理由怀疑...

I have a sneaking suspicion that there isn't a way to just preserve the original quality setting, although I don't have very good grounds for that suspicion...

这篇关于.NET保存jpeg与加载它的质量相同的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆