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);
}
}
}
}
}
查看全文
相关阅读:
54、servlet3.0-ServletContainerInitializer
53、servlet3.0-简介&测试
52、[源码]-Spring源码总结
51、[源码]-Spring容器创建-容器创建完成
50、[源码]-Spring容器创建-Bean创建完成
49、[源码]-Spring容器创建-创建Bean准备
48、[源码]-Spring容器创建-初始化事件派发器、监听器等
Atom编辑器入门到精通(四) Atom使用进阶
Atom编辑器入门到精通(三) 文本编辑基础
Atom编辑器入门到精通(二) 插件的安装和管理
原文地址:https://www.cnblogs.com/yukaizhao/p/cs_thumbnail_img.html
最新文章
C#计算两个时间年份月份差
C# Newtonsoft.Json 读取文件,返回json字符串
Excel2016怎么批量删除空白行 如何删除空白行
三层总结
在IIS中访问APS页面时提示:“最可能的原因使用的托管的处理程序,但是未安装或未完整安装asp.net“
已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行,如何解决
C#
无法打开物理文件 XXX.mdf"。操作系统错误 5:"5(拒绝访问。)"的解决办法
【Linux】linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结
【Windows】命令行查询占用端口信息
热门文章
【Linux】ubuntu或linux网卡配置/etc/network/interfaces
【Linux】linux下vi命令大全
【Linux】Linux常用命令大全
【Linux】linux压缩和解压缩命令大全
【Linux】Xshell-Linux常用命令
【密码学】国密算法
【Java密码学】Java SE 6中XML数字签名的实现
57、springmvc-整合
56、servlet3.0-与SpringMVC整合分析
55、servlet3.0-ServletContext注册三大组件
Copyright © 2011-2022 走看看