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);
}
}
}
}
}
查看全文
相关阅读:
Oracle DB 使用单行函数定制输出
NDK编译多个cpp
使用NDK编译的时候出现 undefined reference to
linux SSSocket 简单封装
OCP-1Z0-051-V9.02-70题
OCP-1Z0-051-V9.02-69题
OCP-1Z0-051-V9.02-68题
OCP-1Z0-051-V9.02-67题
OCP-1Z0-051-V9.02-66题
OCP-1Z0-051-V9.02-65题
原文地址:https://www.cnblogs.com/yukaizhao/p/cs_thumbnail_img.html
最新文章
OCP-1Z0-051-V9.02-84题
IOCP模型总结
IOCP模型与网络编程
Windows单机最大TCP连接数的问题
解决error:2014 Commands out of sync; you can't run this command now
OCP-1Z0-051-V9.02-83题
使用VC++压缩解压缩文件夹
OCP-1Z0-051-V9.02-82题
OCP-1Z0-051-V9.02-81题
OCP-1Z0-051-V9.02-79题
热门文章
OCP-1Z0-051-V9.02-78题
OCP-1Z0-051-V9.02-77题
TCP保活
OCP-1Z0-051-V9.02-76题
Web Storage:简单强大的客户端数据存储技术
web sql database数据存储位置
android ndk 开发之Application.mk
OCP-1Z0-051-V9.02-75题
OCP-1Z0-051-V9.02-74题
安卓修改图标和名称
Copyright © 2011-2022 走看看