【问题标题】:ASP.NET convert image from PNG to jpgASP.NET 将图像从 PNG 转换为 jpg
【发布时间】:2011-02-23 23:34:32
【问题描述】:

我在将图像从 PNG 转换为 JPG 时遇到问题。从 jpg 到 jpg 非常好,但从 PNG 到 jpg 存在像素化问题。我已经在这段代码中实现了压缩方法,但仍然无法生成高质量的图像。

各位有什么想法吗?

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing.Imaging;
using System.Drawing;
using System.IO;
using System.Drawing.Drawing2D;
public partial class _Default : System.Web.UI.Page
{

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

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.ContentType = "image/JPEG";//convert toJPEG for web usage
         // Get a bitmap.
        Bitmap bmp1 = new Bitmap(@"E:\websites\LogoMaster\LogoID4.png");
        ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg);
        // Create an Encoder object based on the GUID
        // for the Quality parameter category.
        System.Drawing.Imaging.Encoder myEncoder =System.Drawing.Imaging.Encoder.Quality;
        // Create an EncoderParameters object.
        // An EncoderParameters object has an array of EncoderParameter
        // objects. In this case, there is only one
        // EncoderParameter object in the array.
        EncoderParameters myEncoderParameters = new EncoderParameters(1);
        EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 100L);//SET to the highest quality
        myEncoderParameters.Param[0] = myEncoderParameter;
       // bmp1.Save(@"E:\websites\LogoMaster\TestPhotoQualityHundredp.jpg", jgpEncoder, myEncoderParameters);
        bmp1.Save(Response.OutputStream, jgpEncoder, myEncoderParameters);
        bmp1.Dispose();

    } 
}

【问题讨论】:

  • 你最近不是问过这个吗?您只是删除并重新询问吗?
  • 是的,问题中有一个错误。不错的收获

标签: asp.net gdi+


【解决方案1】:

也许您需要重新绘制图像?我最近回答了一个关于生成缩略图的问题 (asp.net version of timthumb php class),它使图像变得漂亮和干净。

            Dim bmpThumb As New Bitmap(destWidth, destHeight)
            Dim g = Graphics.FromImage(bmpThumb)
            g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
            g.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
            g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias

            g.DrawImage(img, _
                        New Rectangle(0, 0, destWidth, destHeight), _
                        New Rectangle(sourceX, sourceY, sourceWidth, sourceHeight), GraphicsUnit.Pixel)

            '-----write out Thumbnail to the output stream------'        
            'get jpeg image coded info so we can use it when saving'
            Dim ici As Imaging.ImageCodecInfo = Imaging.ImageCodecInfo.GetImageEncoders().Where(Function(c) c.MimeType = "image/jpeg").First()

            'save image to memory stream'
            Dim ms As New MemoryStream()
            bmpThumb.Save(ms, ici, BuildQualityParams(context))

将其保存到内存流后,只需将其写入 asp.net 响应流即可:

         context.Response.Clear()
            context.Response.ContentType = "image/jpeg"
            ms.WriteTo(context.Response.OutputStream)
            context.Response.Flush()

【讨论】:

  • 看起来仍然很模糊。如果我输出为 png,图片看起来很清晰,而 JPEG 看起来很模糊
  • GDI 必须采取措施使其成为“Web 安全”,这就是压缩很糟糕的原因。有一些关于“颜色量化”的文章,但它只支持版本 2,代码有点太多。我别无选择,只能将结果保存为白色背景的 PNG,以防止 IE 6 出现问题。
  • 也许你可以使用jquery.andreaseberhard.de/pngFix,一个jquery插件,可以让png图像在IE6上透明。
  • 谢谢,我一直在使用它,但不再使用了,谢谢我的新技术(添加白色背景)...大声笑
猜你喜欢
  • 2012-06-01
  • 1970-01-01
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
相关资源
最近更新 更多