加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – MVC3 WebImage助手:resize将透明背景转换为黑色

发布时间:2020-12-15 20:50:49 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试使用MVC3的Web Image助手创建缩略图. 原始图像是具有透明背景的.png.当我尝试使用以下内容调整大小时: var image = blob.DownloadByteArray(); new WebImage(image) .Resize(50,50) .Write(); 生成的缩略图将原始透明背景替换为黑色背景. 解决方
我正在尝试使用MVC3的Web Image助手创建缩略图.

原始图像是具有透明背景的.png.当我尝试使用以下内容调整大小时:

var image = blob.DownloadByteArray();     

new WebImage(image)
    .Resize(50,50)
    .Write();

生成的缩略图将原始透明背景替换为黑色背景.

解决方法

上面这个答案很棒,但我做了一些微调并实现了图像的“保持比例”,这样我们就不会得到拉伸的图像了.
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Web.Helpers;

public static class ResizePng
{
    private static IDictionary<string,ImageFormat> _transparencyFormats = new Dictionary<string,ImageFormat>(StringComparer.OrdinalIgnoreCase) { { "png",ImageFormat.Png },{ "gif",ImageFormat.Gif } };

    public static WebImage ResizePreserveTransparency(this WebImage image,int width,int height)
    {
        ImageFormat format = null;
        if (!_transparencyFormats.TryGetValue(image.ImageFormat,out format))
        {
            return image.Resize(width,height);
        }

        //keep ratio *************************************
        double ratio = (double)image.Width / image.Height;
        double desiredRatio = (double)width / height;
        if (ratio > desiredRatio)
        {
            height = Convert.ToInt32(width / ratio);
        }
        if (ratio < desiredRatio)
        {
            width = Convert.ToInt32(height * ratio);
        }
        //************************************************

        using (Image resizedImage = new Bitmap(width,height))
        {
            using (Bitmap source = new Bitmap(new MemoryStream(image.GetBytes())))
            {
                using (Graphics g = Graphics.FromImage(resizedImage))
                {
                    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
                    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                    g.DrawImage(source,width,height);
                }
            }
            using (MemoryStream ms = new MemoryStream())
            {
                resizedImage.Save(ms,format);
                return new WebImage(ms.ToArray());
            }
        }
    }

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读