zoukankan
html css js c++ java
使用c#生成高品质小空间的缩略图
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);
}
}
}
}
}
查看全文
相关阅读:
NeHe OpenGL教程 第三十四课:地形
NeHe OpenGL教程 第三十三课:TGA文件
NeHe OpenGL教程 第三十二课:拾取游戏
NeHe OpenGL教程 第三十一课:加载模型
NeHe OpenGL教程 第三十课:碰撞检测
58. Extjs grid CheckboxSelectionModel 单选
57.部门职位管理 ExtJs 展示
56. EditorGridPanel和渲染器renderer的使用
55. GridPanel中getSelectionModel详解
54. Extjs组件render说明
原文地址:https://www.cnblogs.com/yukaizhao/p/cs_thumbnail_img.html
最新文章
利用sendmsg和recvmsg来指定发送接口或者获取接收数据接口
借助常见工具快捷实现录音文件的查找与导出
iOS Dev (59) 高度自适应的UITextView
HDU 3177 Crixalis's Equipment(贪婪)
泛型Binary Search Tree实现,And和STL map比较的经营业绩
flex4 amcharts 删除水印
Operand should contain 1 column(s)
linux设备驱动程序第四部分:从如何定位oops对代码的调试方法,驱动线
设计模式:组合模式
《5》CentOS7.0+OpenStack+kvm云平台的部署—组态Horizon
热门文章
数据持久层(三)ODB介绍
数据持久层(二)
c++ 数据持久层研究(一)
mysql设置远程访问权限
mysql 用户管理和权限设置
qsettings 中文键值 注释 支持
mysql创建定时任务
内存泄露及检测
QT 事件过滤器 eventFilter
QT事件
Copyright © 2011-2022 走看看