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);
}
}
}
}
}
查看全文
相关阅读:
【CF720D】Slalom 扫描线+线段树
【CF724F】Uniformly Branched Trees 动态规划
【CF725G】Messages on a Tree 树链剖分+线段树
【CF736D】Permutations 线性代数+高斯消元
【CF799E】Aquarium decoration 线段树
【CF739E】Gosha is hunting 贪心
【CF744D】Hongcow Draws a Circle 二分+几何
【BZOJ3774】最优选择 最小割
【BZOJ2138】stone Hall定理+线段树
【BZOJ4445】[Scoi2015]小凸想跑步 半平面交
原文地址:https://www.cnblogs.com/yukaizhao/p/cs_thumbnail_img.html
最新文章
Ipad Safari iframe cookie 当浏览器默认禁用第三方COOKIE
Sencha Touch 2.2 Store Proxy 异常监控
跟我一起玩转Sencha Touch 移动 WebApp 开发(一)
HTML 5 应用程序缓存
Sencha Touch 2.2.1 Custom Icon 自定义图标
Visual Studio IIS Express 不支持.json后缀的mime类型
.Net MVC 自定义Action类型,XmlAction,ImageAction等
Extjs4.x treegrid,check-tree,locked getChecked() 方法错误
Extjs4.x treepanel,treegrid 节点选择,选中某个节点
Extjs4.x TreeGrid Dirty 更新数据,dirty标记不会自动清除的bug
热门文章
C# 通过反射获取MVC Controller里的类名,方法名,参数列表,返回值类型,Description描述,自定义Attribute
IIS7.5 中启用rest服务,Delete、Put
十大要避免的Ext JS开发方法
Extjs4.x MVC开发模式,效率提高的两大秘诀
Ext.ux.grid.feature.Searching 解析查询参数,动态产生linq lambda表达式
Extjs4.2 Grid搜索Ext.ux.grid.feature.Searching的使用
【CF819C】Mister B and Beacons on Field 数学
【CF708E】Student's Camp 组合数+动态规划
【CF708D】Incorrect Flow 最小费用可行流
【CF718E】Matvey's Birthday BFS+动态规划
Copyright © 2011-2022 走看看