c# Thumbnail 生成缩略图,生成压缩图,最大宽高比例缩放,最大边按比例缩放

本文介绍了如何使用 C# 生成缩略图,并且提出了一种名为 `MaxHW` 的模式,该模式下,图片会按照最大宽高比例缩放,确保最大边不超过指定尺寸。例如,100*50 的图片生成 50*30 的缩略图,结果为 50*25。代码示例展示了如何调用该功能。
摘要由CSDN通过智能技术生成

原代码来自共享,这里谢一下原作者,再增加点扩展,分享一下

,扩展:ThumbMode.MaxHW 模式

,说明:最大宽高比例缩放,最大边按比例缩放

,例1:原图 100*50 生成 50*30,则结果为 50*25

,例2:原图 100*50 生成 50*10,则结果为 20*10

,例3:原图 100*50 生成 200*300,则结果不视为原图。即生成的宽,大于或等于原图宽,或生成的高,大于或等于原图高时,使用原图比例

,使用代码:Thumbnail.MakeThumbnailImage(@"d:\存在的图片.jpg", @"d:\生成的图片文件名.jpg", 50, 30, ThumbMode.MaxHW);

 

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Net;

namespace Common {
    public enum ThumbMode {
        Default,
        HW,
        W,
        H,
        Cut,
        MaxHW
    }
    /// <summary>
    /// Thumbnail 生成缩略图,生成压缩图,
    /// </summary>
    public class Thumbnail {
        private Image srcImage;
        private string srcFileName;

        /// <summary>
        /// 创建
        /// </summary>
        /// <param name="FileName">原始图片路径</param>
        public bool SetImage(string FileName) {
            srcFileName = JnUtils.GetMapPath(FileName);
            try {
                srcImage = Image.FromFile(srcFileName);
            }
            catch {
                return false;
            }
            return true;
        }

        /// <summary>
        /// 回调
        /// </summary>
        /// <returns></returns>
        public bool ThumbnailCallback() => false;

        /// <summary>
        /// 生成缩略图,返回缩略图的Image对象
        /// </summary>
        /// <param name="Width">缩略图宽度</param>
        /// <param name="Height">缩略图高度</param>
        /// <returns>缩略图的Image对象</returns>
        public Image GetImage(int Width, int Height) {
            Image img;
            Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
            img = srcImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);
            return img;
        }

        /// <summary>
        /// 保存缩略图
        /// </summary>
        /// <param name="Width"></param>
        /// <param name="Height"></param>
        public void SaveThumbnailImage(int Width, int Height) {
            switch (Path.GetExtension(srcFileName).ToLower()) {
                case ".png":
                    SaveImage(Width, Height, ImageFormat.Png);
                    break;
                case ".gif":
                    SaveImage(Width, Height, ImageFormat.Gif);
                    break;
                default:
                    SaveImage(Width, Height, ImageFormat.Jpeg);
                    break;
            }
        }

        /// <summary>
        /// 生成缩略图并保存
        /// </summary>
        /// <param name="Width">缩略图的宽度</param>
        /// <param name="Height">缩略图的高度</param>
        /// <param name="imgformat">保存的图像格式</param>
        /// <returns>缩略图的Image对象</returns>
        public void SaveImage(int Width, int Height, ImageFormat imgformat) {
            if (imgformat != ImageFormat.Gif && (srcImage.Width > Width) || (srcImage.Height > Height)) {
                Image img;
                Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
                img =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值