c# 创建缩略图
2024-08-31 07:06:10
/// <summary>
/// 创建缩略图
/// </summary>
/// <param name="srcFileName"></param>
/// <param name="destFileName"></param>
private static void CreateThumbnailImage(string srcFileName, string destFileName)
{
using (var img = new Bitmap(srcFileName))
{
Size originalSize = new Size(img.Width, img.Height);
Size targetSize = new Size(, );
targetSize = CalculateNewImageSize(originalSize, targetSize);
using (
var bitmap = new Bitmap(targetSize.Width, targetSize.Height, PixelFormat.Format32bppArgb))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.InterpolationMode = InterpolationMode.Low;
using (var wrapmode = new ImageAttributes())
{
wrapmode.SetWrapMode(WrapMode.TileFlipXY);
g.DrawImage(img, new Rectangle(, , targetSize.Width, targetSize.Height),
, ,
img.Width,
img.Height,
GraphicsUnit.Pixel,
wrapmode);
}
}
bitmap.Save(destFileName);
}
}
} /// <summary>
/// 计算缩略图的尺寸
/// </summary>
/// <param name="originalSize"></param>
/// <param name="targetSize"></param>
/// <returns></returns>
private static Size CalculateNewImageSize(Size originalSize, Size targetSize)
{
if (originalSize.Width <= targetSize.Width&&
originalSize.Height<=targetSize.Height)
{
//目标尺寸比原尺寸大,那么直接使用原尺寸
return originalSize;
} double targetRatio = GetRatio(targetSize);
double originalRatio = GetRatio(originalSize); var size = new Size(targetSize.Width, targetSize.Height); if (originalRatio < targetRatio)
{
size.Width = (originalSize.Width*targetSize.Height)/originalSize.Height;
}
else
{
size.Height = (originalSize.Height*targetSize.Width)/originalSize.Width;
} return size;
} private static double GetRatio(Size size)
{
return (double) size.Width/size.Height;
}
支持大文件的缩略图,800M的bmp图片缩放到300*300大概100kb左右
最新文章
- RESTORE DATABASE的standby选项
- [WP8.1UI控件编程]Windows Phone XAML页面的编译
- Java历史版本下载
- angular常见坑洞
- 织梦DedeCms网站更换域名后文章图片路径批量修改
- C#读取xlsx文件Excel2007
- c++结束进程的程序
- leetcode@ [131/132] Palindrome Partitioning &; Palindrome Partitioning II
- JavaScript要点 (一) 变量-作用域
- Javascript模块化编程:模块的写法
- 熟悉Git使用
- PAI里field module的on input和on request区别
- std::move()
- Matlab: 路径的操作
- Android BroadcastReceiver 接收收到短信的广播
- Ubuntu在终端执行命令时出现的错误
- python &; mysql 操作(compare_sum_fee)
- Spark读HBase写MySQL
- Centos 7 下监控与告警部署
- 别人的Linux私房菜(6)文件权限与目录配置