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);
}
}
}
}
}
查看全文
相关阅读:
POJ2481(树状数组:统计数字 出现个数)
jenkins(2)-linux环境下jenkins启动/重启/停止命令
jenkins(1)-部分插件由于缺少依赖无法加载。要恢复这些插件提供的功能,需要修复这些问题并重启Jenkins的解决办法
linux(4)-rpm包安装
charles(2)-charles如何打断点,修改Request数据
charles(1)-charles如何打断点,修改Response数据
linux(3)-普通用户如何切换到root
jmeter(51) Groovy脚本高级实战
jmeter(49)-jenkins+ant+jmeter持续集成接口自动化测试-(linux环境)
Codeforces Round #545 (Div. 2)D(KMP,最长公共前后缀,贪心)
原文地址:https://www.cnblogs.com/yukaizhao/p/cs_thumbnail_img.html
最新文章
119.Pascal's Triangle II
HDU-- Buy Tickets
HDU1394-Minimum Inversion Number
HDU-2975 Billboard
HDU 1556 Color the ball
HDU- 1754 I Hate It
HDU-1166 敌兵布阵
HDU-1412 {A} + {B}
HDU-1406 完数
HDU-1395 2^x mod n = 1
热门文章
HDU-1391 Number Steps
POJ3268(最短路)
POJ1797(dijkstra求最短最长边)
POJ2253(djkstra求最长最短边)
蓝桥杯(道路与航路)
POJ2387(最短路入门)
HDU4391(线段树+剪枝)
POJ2887(块状链表)
POJ1195(二维树状数组)
POJ3067(树状数组:统计数字出现个数)
Copyright © 2011-2022 走看看