C#更改上传图像的dpi

C#更改上传图像的dpi,第1张

概述我必须遵循被调用来改变图像分辨率的函数.我想这样做,所以上传的图像例如300dpi将被修改为72dpi(对于web).这个问题与我在这里工作的 another question有关. 我创建了一个扩展方法,以便能够在我的应用程序中的更多位置使用此功能,而不是仅在上载新文件时. (见上述问题) public static byte[] SetDpiTo72(this byte[] imageToFi 我必须遵循被调用来改变图像分辨率的函数.我想这样做,所以上传的图像例如300dpi将被修改为72dpi(对于web).这个问题与我在这里工作的 @L_419_0@有关.

我创建了一个扩展方法,以便能够在我的应用程序中的更多位置使用此功能,而不是仅在上载新文件时. (见上述问题)

public static byte[] SetDpiTo72(this byte[] imagetoFit,string mimeType,Size newSize){        using (MemoryStream memoryStream = new MemoryStream(),newMemoryStream = new MemoryStream())    {        memoryStream.Write(imagetoFit,imagetoFit.Length);        var originalimage = new Bitmap(memoryStream);        using (var canvas = Graphics.FromImage(originalimage))        {            canvas.SmoothingMode = SmoothingMode.AntiAlias;            canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;            canvas.PixelOffsetMode = PixelOffsetMode.HighQuality;            canvas.DrawImage((Image)originalimage,newSize.WIDth,newSize.Height);            newBitmap.SetResolution(72,72);            newBitmap.Save(newMemoryStream,ImageFunctions.GetEncoderInfo(mimeType),null);        }        return newMemoryStream.ToArray();    }}

提到的扩展方法在类似于下面情况的函数中被调用;

if (newSize.WIDth > originalimage.WIDth && newSize.Height > originalimage.Height){     newSize.WIDth = originalimage.WIDth;     newSize.Height = originalimage.Height;     uploadedfilebuffer = uploadedfilebuffer.SetDpiTo72(uploadedfile.ContentType,newSize);     return Createfile(newSize,uploadedfile,uploadedfilebuffer);}

进入的bytearray是一个bytearray文件.它已经具有正确的大小,但我想将分辨率更改为72dpi.但是,在执行exectution并保存图像后,分辨率仍然是原始输入的分辨率,即300dpi.我怎样才能做到这一点?

几个答案后的更新:

public static byte[] SetDpiTo72(this byte[] imagetoFit,Size newSize)        {            using (MemoryStream memoryStream = new MemoryStream(),newMemoryStream = new MemoryStream())            {                memoryStream.Write(imagetoFit,imagetoFit.Length);                var originalimage = new Bitmap(memoryStream);                using (var canvas = Graphics.FromImage(originalimage))                {                    canvas.SmoothingMode = SmoothingMode.AntiAlias;                    canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;                    canvas.PixelOffsetMode = PixelOffsetMode.HighQuality;                    canvas.DrawImage((Image)originalimage,newSize.Height);                    originalimage.SetResolution(72,72);                    var epQuality = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality,75);                    var epParameters = new EncoderParameters(1);                    epParameters.Param[0] = epQuality;                    Image newimg = Image.FromStream(memoryStream);                    //Getting an GDI+ exception after the execution of this line.                    newimg.Save("C:\test1234.jpg",epParameters);                    originalimage.Save("test.jpg",ImageFormat.Jpeg);                    //This line give me an Argumentexception - Parameter is not valID.                    //originalimage.Save(newMemoryStream,epParameters);                    //newMemoryStream.Close();                }                return newMemoryStream.ToArray();            }        }

除了异常之外的stackstrace告诉我以下内容;

at System.Drawing.Image.Save(String filename,ImageCodecInfo encoder,EncoderParameters encoderParams)   at Extensions.ByteArrayExtensions.SetDpiTo72(Byte[] imagetoFit,String mimeType,Size newSize) in C:\Website\Project\Extensions\ByteArrayExtensions.cs:line 356   at CMS.Presentation.fileFunctions.CreateFullsizeImage(httpPostedfileBase uploadedfile,Size newSize,Byte[] uploadedfilebuffer) in C:\Website\Project\CMS.Presentation\fileFunctions.cs:line 197   at CMS.Presentation.fileFunctions.Createfile(httpPostedfileBase uploadedfile,INodeService nodeservice,GuID userID,Node parentNode) in C:\Website\Project\CMS.Presentation\fileFunctions.cs:line 53

与此同时,我还开发了另一个功能(见下文),只调整位图.这似乎工作正常.我不能在我当前的实现中使用此函数,因为它只返回一个Bitmap.或者我应该改变一切以使用位图?

private static Bitmap ResizeImage(Image image,int wIDth,int height)        {            var frameCount = image.GetFrameCount(new FrameDimension(image.FrameDimensionsList[0]));            var newDimensions = ImageFunctions.GenerateImageDimensions(image.WIDth,image.Height,wIDth,height);            Bitmap resizedImage;            if (frameCount > 1)            {                //we have a animated GIF                resizedImage = ResizeAnimatedGifImage(image,height);            }            else            {                resizedImage = (Bitmap)image.GetthumbnailImage(newDimensions.WIDth,newDimensions.Height,null,IntPtr.Zero);            }            resizedImage.SetResolution(72,72);            return resizedImage;        }
解决方法 花了我一会儿,但我终于找到了问题!
问题在于我使用的ResizeImage函数.在’GetthumbnailImage’中要具体.我遇到了另一个模糊图像的问题,这是可以解释的,因为GetthumbnailImage会将创建的thumbnail拉伸到所需的大小.缩略图的分辨率永远不会改变.
private static Bitmap ResizeImage(Image image,72);            return resizedImage;        }

通过将上面的函数修改为下面的函数,我能够使用Graphics.DrawImage在渲染之前重绘新图像来解决问题. GenerateImageDimensions也略有修改.这个问题一起解决了.

private static Bitmap ResizeImage(Image image,height);            var resizedImage = new Bitmap(newDimensions.WIDth,newDimensions.Height);            if (frameCount > 1)            {                //we have a animated GIF                resizedImage = ResizeAnimatedGifImage(image,height);            }            else            {                //we have a normal image                using (var gfx = Graphics.FromImage(resizedImage))                {                    gfx.SmoothingMode = SmoothingMode.HighQuality;                    gfx.InterpolationMode = InterpolationMode.HighQualityBicubic;                    gfx.PixelOffsetMode = PixelOffsetMode.HighQuality;                    var targRectangle = new Rectangle(0,newDimensions.WIDth,newDimensions.Height);                    var srcRectangle = new Rectangle(0,image.WIDth,image.Height);                    gfx.DrawImage(image,targRectangle,srcRectangle,GraphicsUnit.Pixel);                }            }            return resizedImage;        }
总结

以上是内存溢出为你收集整理的C#更改上传图像的dpi全部内容,希望文章能够帮你解决C#更改上传图像的dpi所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1243570.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存