使用c#生成高品质小空间的缩略图
dot自带的生成缩略图的方法是Bitmap.GetThumbnailImage这个方法生成的缩略图不够清晰,一般我们会使用Graphics高质量插值发生成清晰的缩略图,这时候大小会不尽人意,怎么办?我们可以使用jpeg压缩的方法压缩一下图片,这样图片的大小会缩小到压缩前的十分之一。
dot自带的生成缩略图的方法是Bitmap.GetThumbnailImage这个方法生成的缩略图不够清晰,一般我们会使用Graphics高质量插值发生成清晰的缩略图,这时候大小会不尽人意,怎么办?我们可以使用jpeg压缩的方法压缩一下图片,这样图片的大小会缩小到压缩前的十分之一。
下面是完成这项工作的代码:

压缩图片的三种方式
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.IO;

namespace ConsoleApplication3_ThumbnailImg


{
class Program

{
const int HEIGHT = 190;
const int WIDTH = 190;
static void Main(string[] args)

{
string srcImgPath = @"G:\photoes\20060725\Picture 057.jpg";
string targetFolder = @"E:\Diary\Test\thumbnail";

SetThumbnail_1(srcImgPath, targetFolder);
SetThumbnail_2(srcImgPath, targetFolder);
SetThumbnail_3(srcImgPath, targetFolder);

Console.Read();
}

static void SetThumbnail_1(string srcImgPath, string targetFolder)

{
using (Bitmap source = new Bitmap(srcImgPath))

{
// return the source image if it's smaller than the designated thumbnail
int wi, hi;
wi = WIDTH;
hi = HEIGHT;


// maintain the aspect ratio despite the thumbnail size parameters
if (source.Width > source.Height)

{
wi = WIDTH;
hi = (int)(source.Height * ((decimal)WIDTH / source.Width));
}
else

{
hi = HEIGHT;
wi = (int)(source.Width * ((decimal)HEIGHT / source.Height));
}

using (Image thumb = source.GetThumbnailImage(wi, hi, null, IntPtr.Zero))

{
string targetPath = Path.Combine(targetFolder, "th_1.jpg");
thumb.Save(targetPath);
}
}
}

static void SetThumbnail_2(string srcImgPath, string targetFolder)

{
using (Bitmap source = new Bitmap(srcImgPath))

{
// return the source image if it's smaller than the designated thumbnail
int wi, hi;
wi = WIDTH;
hi = HEIGHT;


// maintain the aspect ratio despite the thumbnail size parameters
if (source.Width > source.Height)

{
wi = WIDTH;
hi = (int)(source.Height * ((decimal)WIDTH / source.Width));
}
else

{
hi = HEIGHT;
wi = (int)(source.Width * ((decimal)HEIGHT / source.Height));
}

// original code that creates lousy thumbnails
// System.Drawing.Image ret = source.GetThumbnailImage(wi,hi,null,IntPtr.Zero);
using (System.Drawing.Bitmap thumb = new Bitmap(wi, hi))

{
using (Graphics g = Graphics.FromImage(thumb))

{
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.FillRectangle(Brushes.White, 0, 0, wi, hi);
g.DrawImage(source, 0, 0, wi, hi);
}
string targetPath = Path.Combine(targetFolder, "th_2.jpg");
thumb.Save(targetPath);
}

}
}

static void SetThumbnail_3(string srcImgPath, string targetFolder)

{
//Configure JPEG Compression Engine
System.Drawing.Imaging.EncoderParameters encoderParams = new System.Drawing.Imaging.EncoderParameters();
long[] quality = new long[1];
quality[0] = 75;
System.Drawing.Imaging.EncoderParameter encoderParam = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
encoderParams.Param[0] = encoderParam;

System.Drawing.Imaging.ImageCodecInfo[] arrayICI = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
System.Drawing.Imaging.ImageCodecInfo jpegICI = null;
for (int x = 0; x < arrayICI.Length; x++)

{
if (arrayICI[x].FormatDescription.Equals("JPEG"))

{
jpegICI = arrayICI[x];
break;
}
}

using (Bitmap source = new Bitmap(srcImgPath))

{
int wi, hi;
wi = WIDTH;
hi = HEIGHT;


// maintain the aspect ratio despite the thumbnail size parameters
if (source.Width > source.Height)

{
wi = WIDTH;
hi = (int)(source.Height * ((decimal)WIDTH / source.Width));
}
else

{
hi = HEIGHT;
wi = (int)(source.Width * ((decimal)HEIGHT / source.Height));
}

// original code that creates lousy thumbnails
// System.Drawing.Image ret = source.GetThumbnailImage(wi,hi,null,IntPtr.Zero);
using (System.Drawing.Bitmap thumb = new Bitmap(wi, hi))

{
using (Graphics g = Graphics.FromImage(thumb))

{
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.FillRectangle(Brushes.White, 0, 0, wi, hi);
g.DrawImage(source, 0, 0, wi, hi);
}
string targetPath = Path.Combine(targetFolder, "th_3.jpg");
thumb.Save(targetPath, jpegICI, encoderParams);
}

}

}
}
}
下面是完成这项工作的代码:







































































































































































































【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2007-05-28 SEO 搜索引擎优化技巧