zoukankan
html css js c++ java
一個圖片縮放類(按長寬比例縮放,自定義長寬縮放)
public
class
Thumbnail
{
/**/
///
<summary>
///
制作缩略图(如果原圖長大於寬以長為基准縮放,反之以寬為基准縮放)
///
</summary>
///
<param name="fileName">
原图路径
</param>
///
<param name="newFileName">
新图路径
</param>
///
<param name="maxWidth">
最大宽度
</param>
///
<param name="maxHeight">
最大高度
</param>
public
static
void
MakeThumbnailImage(
string
fileName,
string
newFileName,
int
maxWidth,
int
maxHeight)
{
Image original
=
Image.FromFile(fileName);
Size _newSize
=
ResizeImage(original.Width, original.Height, maxWidth, maxHeight);
//
_image.Height = _newSize.Height;
//
_image.Width = _newSize.Width;
Image displayImage
=
new
Bitmap(original, _newSize);
try
{
Image tempImage
=
displayImage;
original.Dispose();
tempImage.Save(newFileName, GetFormat(fileName));
}
finally
{
original.Dispose();
}
}
/**/
///
<summary>
///
计算新尺寸
///
</summary>
///
<param name="width">
原始宽度
</param>
///
<param name="height">
原始高度
</param>
///
<param name="maxWidth">
最大新宽度
</param>
///
<param name="maxHeight">
最大新高度
</param>
///
<returns></returns>
private
static
Size ResizeImage(
int
width,
int
height,
int
maxWidth,
int
maxHeight)
{
decimal
MAX_WIDTH
=
(
decimal
)maxWidth;
decimal
MAX_HEIGHT
=
(
decimal
)maxHeight;
decimal
ASPECT_RATIO
=
MAX_WIDTH
/
MAX_HEIGHT;
int
newWidth, newHeight;
decimal
originalWidth
=
(
decimal
)width;
decimal
originalHeight
=
(
decimal
)height;
if
(originalWidth
>
MAX_WIDTH
||
originalHeight
>
MAX_HEIGHT)
{
decimal
factor;
//
determine the largest factor
if
(originalWidth
/
originalHeight
>
ASPECT_RATIO)
{
factor
=
originalWidth
/
MAX_WIDTH;
newWidth
=
Convert.ToInt32(originalWidth
/
factor);
newHeight
=
Convert.ToInt32(originalHeight
/
factor);
}
else
{
factor
=
originalHeight
/
MAX_HEIGHT;
newWidth
=
Convert.ToInt32(originalWidth
/
factor);
newHeight
=
Convert.ToInt32(originalHeight
/
factor);
}
}
else
{
newWidth
=
width;
newHeight
=
height;
}
return
new
Size(newWidth, newHeight);
}
/**/
///
<summary>
///
保存图片
///
</summary>
///
<param name="image">
Image 对象
</param>
///
<param name="savePath">
保存路径
</param>
///
<param name="ici">
指定格式的编解码参数
</param>
private
static
void
SaveImage(Image image,
string
savePath, ImageCodecInfo ici)
{
//
设置 原图片 对象的 EncoderParameters 对象
EncoderParameters parameters
=
new
EncoderParameters(
1
);
parameters.Param[
0
]
=
new
EncoderParameter(Encoder.Quality, ((
long
)
100
));
image.Save(savePath, ici, parameters);
parameters.Dispose();
}
/**/
///
<summary>
///
获取图像编码解码器的所有相关信息
///
</summary>
///
<param name="mimeType">
包含编码解码器的多用途网际邮件扩充协议 (MIME) 类型的字符串
</param>
///
<returns>
返回图像编码解码器的所有相关信息
</returns>
private
static
ImageCodecInfo GetCodecInfo(
string
mimeType)
{
ImageCodecInfo[] CodecInfo
=
ImageCodecInfo.GetImageEncoders();
foreach
(ImageCodecInfo ici
in
CodecInfo)
{
if
(ici.MimeType
==
mimeType)
return
ici;
}
return
null
;
}
/**/
///
<summary>
///
得到图片格式
///
</summary>
///
<param name="name">
文件名称
</param>
///
<returns></returns>
public
static
ImageFormat GetFormat(
string
name)
{
string
ext
=
name.Substring(name.LastIndexOf(
"
.
"
)
+
1
);
switch
(ext.ToLower())
{
case
"
jpg
"
:
case
"
jpeg
"
:
return
ImageFormat.Jpeg;
case
"
bmp
"
:
return
ImageFormat.Bmp;
case
"
png
"
:
return
ImageFormat.Png;
case
"
gif
"
:
return
ImageFormat.Gif;
default
:
return
ImageFormat.Jpeg;
}
}
/**/
///
<summary>
///
自定義縮放圖(縮略圖時以圖頂端為起點)
///
</summary>
///
<param name="fileName"></param>
///
<param name="newFileName"></param>
///
<param name="newWidth"></param>
///
<param name="newHeight"></param>
public
static
void
MakeCustomImage(
string
fileName,
string
newFileName,
int
newWidth,
int
newHeight)
{
Image image
=
Image.FromFile(fileName);
int
i
=
0
;
int
width
=
image.Width;
int
height
=
image.Height;
if
(width
>
height)
{
i
=
height;
}
else
{
i
=
width;
}
Bitmap b
=
new
Bitmap(newWidth, newHeight);
try
{
Graphics g
=
Graphics.FromImage(b);
g.InterpolationMode
=
InterpolationMode.High;
g.SmoothingMode
=
SmoothingMode.HighQuality;
//
清除整个绘图面并以透明背景色填充
g.Clear(Color.Transparent);
if
(width
<
height)
{
g.DrawImage(image,
new
Rectangle(
0
,
0
, newWidth, newHeight),
new
Rectangle((width
-
newWidth)
/
2
,
0
, newWidth,newHeight), GraphicsUnit.Pixel);
}
else
{
g.DrawImage(image,
new
Rectangle(
0
,
0
, newWidth, newHeight),
new
Rectangle((width
-
newWidth)
/
2
,
0
, newWidth, newHeight), GraphicsUnit.Pixel);
}
image.Dispose();
SaveImage(b, newFileName, GetCodecInfo(
"
image/
"
+
GetFormat(fileName).ToString().ToLower()));
}
finally
{
image.Dispose();
b.Dispose();
}
}
}
查看全文
相关阅读:
Linux(实操篇)--- 实用指令-运行级别和找回root密码
Python使用文件操作实现一个XX信息管理系统的示例
python解释器安装教程的方法步骤
python如何使用代码运行助手
python 识别登录验证码图片功能的实现代码(完整代码)
python线性插值解析
python协程 详解
maxcompute mapjoin
spark split节点笔记
安装和配置hadoop
原文地址:https://www.cnblogs.com/wang123/p/1200060.html
最新文章
数字标牌E版-E版管理端V4.3.7.0操作手册
Redis基础篇(八)数据分片
Redis基础篇(七)哨兵机制
tp5模型的定义和使用
tp5 路由定义
TP5模板布局+模板继承
tp5 图片上传
Tp5 验证码 使用方法
tp5内置验证规则
tp5表单验证
热门文章
TP5中Session和Cookie的基础用法
tp5--图片上传
tp5--ajax删除
Redis 配置文件详解
0x01 基本算法-位运算 a^b
数据结构 --- 线段树
由数据范围反推算法时间复杂度以及算法内容
(基础)--- 动态规划 --- 线性、背包、区间
Linux(实操篇)--- 实用指令——文件目录类
Linux(实操篇)--- 实用指令——帮助指令
Copyright © 2011-2022 走看看