C#放缩、截取、合并图片并生成高质量新图的类
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.IO;
namespace Framework
{
public class ImageClass
{
public Image ResourceImage;
public int Width=0;
public int Height=0;
private int ImageWidth;
private int ImageHeight;
private ImageFormat imgFormat;
public string ErrMessage;
public ImageClass(string ImageFileName)
{
ResourceImage = Image.FromFile(ImageFileName);
Width = ResourceImage.Width;
Height = ResourceImage.Height;
imgFormat = ResourceImage.RawFormat;
ErrMessage = "";
}
public ImageClass(byte[] Img)
{
MemoryStream imgStream = new MemoryStream(Img);
try
{
ResourceImage = System.Drawing.Image.FromStream(imgStream);
Width = ResourceImage.Width;
Height = ResourceImage.Height;
imgFormat = ResourceImage.RawFormat;
}
catch (Exception ex)
{
ErrMessage = ex.ToString();
}
}
public bool ThumbnailCallback()
{
return false;
}
public Image GetReducedImage(int Width, int Height)
{
try
{
Image ReducedImage;
Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
ReducedImage = ResourceImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);
return ReducedImage;
}
catch (Exception e)
{
ErrMessage = e.Message;
return null;
}
}
public bool GetReducedImage(int Width, int Height, string targetFilePath)
{
try
{
EncoderParameter p;
EncoderParameters ps;
ps = new EncoderParameters(1);
p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 85L);
ps.Param[0] = p;
Image ReducedImage;
Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
ReducedImage = ResourceImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);
Graphics g = System.Drawing.Graphics.FromImage(ReducedImage);
// 设置画布的描绘质量
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
//清空画布并以透明背景色填充
g.Clear(Color.Transparent);
g.DrawImage(ResourceImage, new Rectangle(0, 0, Width, Height), new Rectangle(0, 0, ResourceImage.Width, ResourceImage.Height), GraphicsUnit.Pixel);
ImageCodecInfo imgCodecInfo = GetCodecInfo(imgFormat.ToString());
if (imgCodecInfo == null)
{
ReducedImage.Save(targetFilePath, imgFormat);
}
else
{
ReducedImage.Save(targetFilePath, GetCodecInfo(targetFilePath), ps);
}
ReducedImage.Dispose();
g.Dispose();
return true;
}
catch (Exception e)
{
ErrMessage = e.Message;
return false;
}
}
public Image GetReducedImage(double Percent)
{
try
{
Image ReducedImage;
Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);
ImageHeight = Convert.ToInt32(ResourceImage.Height * Percent);
ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);
return ReducedImage;
}
catch (Exception e)
{
ErrMessage = e.Message;
return null;
}
}
public bool GetReducedImage(double Percent, string targetFilePath)
{
try
{
EncoderParameter p;
EncoderParameters ps;
ps = new EncoderParameters(1);
p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 85L);
ps.Param[0] = p;
Image ReducedImage;
Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);
ImageHeight = Convert.ToInt32(ResourceImage.Height * Percent);
ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);
Graphics g = System.Drawing.Graphics.FromImage(ReducedImage);
// 设置画布的描绘质量
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
//清空画布并以透明背景色填充
g.Clear(Color.Transparent);
g.DrawImage(ResourceImage, new Rectangle(0, 0, ImageWidth, ImageHeight), new Rectangle(0, 0, ResourceImage.Width, ResourceImage.Height), GraphicsUnit.Pixel);
ImageCodecInfo imgCodecInfo = GetCodecInfo(imgFormat.ToString());
if (imgCodecInfo == null)
{
ReducedImage.Save(targetFilePath, imgFormat);
}
else
{
ReducedImage.Save(targetFilePath, GetCodecInfo(targetFilePath), ps);
}
ReducedImage.Dispose();
g.Dispose();
return true;
}
catch (Exception e)
{
ErrMessage = e.Message;
return false;
}
}
public bool GetReducedImage(string targetFilePath)
{
try
{
ResourceImage.Save(targetFilePath, ImageHelper.GetFormat(targetFilePath));
return true;
}
catch (Exception e)
{
ErrMessage = e.Message;
return false;
}
}
public bool CaptureImg(string targetFilePath, int width, int height, int spaceX, int spaceY)
{
try
{
//载入底图
int x = 0; //截取X坐标
int y = 0; //截取Y坐标
//原图宽与生成图片宽 之差
//当小于0(即原图宽小于要生成的图)时,新图宽度为较小者 即原图宽度 X坐标则为0
//当大于0(即原图宽大于要生成的图)时,新图宽度为设置值 即width X坐标则为 sX与spaceX之间较小者
//Y方向同理
int sX = ResourceImage.Width - width;
int sY = ResourceImage.Height - height;
if (sX > 0)
{
x = sX > spaceX ? spaceX : sX;
}
else
{
width = ResourceImage.Width;
}
if (sY > 0)
{
y = sY > spaceY ? spaceY : sY;
}
else
{
height = ResourceImage.Height;
}
EncoderParameter p;
EncoderParameters ps;
ps = new EncoderParameters(1);
p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 85L);
ps.Param[0] = p;
Bitmap ReducedImage = new Bitmap(width, height);
Graphics g = System.Drawing.Graphics.FromImage(ReducedImage);
// 设置画布的描绘质量
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
//清空画布并以透明背景色填充
g.Clear(Color.Transparent);
g.DrawImage(ResourceImage, 0, 0, new Rectangle(x, y, width, height), GraphicsUnit.Pixel);
ImageCodecInfo imgCodecInfo = GetCodecInfo(imgFormat.ToString());
if (imgCodecInfo == null)
{
ReducedImage.Save(targetFilePath, imgFormat);
}
else
{
ReducedImage.Save(targetFilePath, GetCodecInfo(targetFilePath), ps);
}
//释放资源
//saveImage.Dispose();
ReducedImage.Dispose();
g.Dispose();
}
catch (Exception ex)
{
ErrMessage = ex.Message;
return false;
}
return true;
}
public bool MergerImg(string targetFilePath, int ImgWidth, int ImgHeight)
{
try
{
EncoderParameter p;
EncoderParameters ps;
ps = new EncoderParameters(1);
p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 85L);
ps.Param[0] = p;
//创建要显示的图片对象,根据参数的个数设置宽度
Bitmap ReducedImage = new Bitmap(ImgWidth, ImgHeight);
Graphics g = Graphics.FromImage(ReducedImage);
// 设置画布的描绘质量
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
//清空画布并以透明背景色填充
g.Clear(Color.Transparent);
int StartX = (ImgWidth - this.Width) / 2;
int StartY = (ImgHeight - this.Height) / 2;
g.DrawImage(ResourceImage, StartX, StartY, this.Width, this.Height);
//保存图象
ImageCodecInfo imgCodecInfo = GetCodecInfo(imgFormat.ToString());
if (imgCodecInfo == null)
{
ReducedImage.Save(targetFilePath, imgFormat);
}
else
{
ReducedImage.Save(targetFilePath, GetCodecInfo(targetFilePath), ps);
}
//释放资源
ReducedImage.Dispose();
g.Dispose();
}
catch (Exception ex)
{
ErrMessage = ex.Message;
return false;
}
return true;
}
public bool MergerImg(string targetFilePath, System.Drawing.Image image, int ImgWidth, int ImgHeight)
{
try
{
EncoderParameter p;
EncoderParameters ps;
ps = new EncoderParameters(1);
p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 85L);
ps.Param[0] = p;
//创建要显示的图片对象,根据参数的个数设置宽度
Bitmap ReducedImage = new Bitmap(ImgWidth, ImgHeight);
Graphics g = Graphics.FromImage(ReducedImage);
// 设置画布的描绘质量
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
//清空画布并以透明背景色填充
g.Clear(Color.Transparent);
int StartX = (ImgWidth - image.Width) / 2;
int StartY = (ImgHeight - image.Height) / 2;
g.DrawImage(image, StartX, StartY, image.Width, image.Height);
//保存图象
ImageCodecInfo imgCodecInfo = GetCodecInfo(imgFormat.ToString());
if (imgCodecInfo == null)
{
ReducedImage.Save(targetFilePath, imgFormat);
}
else
{
ReducedImage.Save(targetFilePath, GetCodecInfo(targetFilePath), ps);
}
//释放资源
ReducedImage.Dispose();
g.Dispose();
}
catch (Exception ex)
{
ErrMessage = ex.Message;
return false;
}
return true;
}
//返回图片解码器信息用于jpg图片
private ImageCodecInfo GetCodecInfo(string str)
{
string ext = str.Substring(str.LastIndexOf(".") + 1);
string mimeType = "";
switch (ext.ToLower())
{
case "jpe":
case "jpg":
case "jpeg":
mimeType = "image/jpeg";
break;
case "bmp":
mimeType = "image/bmp";
break;
case "png":
mimeType = "image/png";
break;
case "tif":
case "tiff":
mimeType = "image/tiff";
break;
default:
mimeType = "image/jpeg";
break;
}
ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();
foreach (ImageCodecInfo ici in CodecInfo)
{
if (ici.MimeType == mimeType) return ici;
}
return null;
}
public void Dispose()
{
ResourceImage.Dispose();
}
}
}
因为tiff格式的图片,一张可以有多页,所以现在有需求如下:
1. 可以随便添加一张图片(tiff,jpeg,png等格式)的图片到指定的tiff图片中去
2. 可以从tiff图片中抽取出任意张图片出来,可以保存为(tiff,png,jpeg等格式)
1 Image img = Image.FromFile("C:\\1.tif");
2 Guid guid = (Guid)img.FrameDimensionsList.GetValue(0);
3 FrameDimension dimension = new FrameDimension(guid);
4 int totalPage = img.GetFrameCount(dimension);
5
6 this.statusBar1.Text = "共"+totalPage+"页";
7
8 for(int i=0;i<totalPage;i++)
9 {
10 img.SelectActiveFrame(dimension,i);
11 img.Save("C:\\Gif"+i+".gif",System.Drawing.Imaging.ImageFormat.Gif);
12 }
13
C#放缩、截取、合并图片并生成高质量新图的类的更多相关文章
- atitit.thumb生成高质量缩略图 php .net c++ java
atitit.java thumb生成高质量缩略图 php .net c++ 1. 图像缩放(image scaling)---平滑度(smoothness)和清晰度(sharpness) 1 2. ...
- C#剪切生成高质量缩放图片
/// <summary> /// 高质量缩放图片 /// </summary> /// <param name="OriginFilePath"&g ...
- Highcharts结合PhantomJS在服务端生成高质量的图表图片
项目背景 最近忙着给部门开发一套交互式的报表系统,来替换原有的静态报表系统. 老系统是基于dotnetCHARTING开发的,dotnetCHARTING的优势是图表类型丰富,接口调用简单,使用时只需 ...
- MPlayer-ww 增加边看边剪切功能+生成高质量GIF功能
http://pan.baidu.com/s/1eQm5a74 下载FFmpeg palettegen paletteuse documentation 需要下载 FFmpeg2.6 以上 并FFmp ...
- <1>Python生成高质量Html文件:Pyh模块+Bootstrap框架
一,介绍 QQ交流群:585499566 本文的目的是怎么使用Pyh+Bootstrap快速生成简约,大方,清新的Html页面,涉及到的技能:Python小白技能,Pyh会阅读中文文档,Html基础, ...
- ASP.NET 画图与图像处理-生成高质量缩略图
http://www.cftea.com/c/2007/08/SG9WFLZJD62Z2D0O.asp
- [golang]按图片中心旋转后的新图左顶点和原图左顶点的偏移量计算
1 前言 略,作为记录使用 2 代码 /** * @Author: FB * @Description: * @File: RotateSample.go * @Version: 1.0.0 * @D ...
- PHPThumb处理图片,生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转
[强烈推荐]下载地址(github.com/masterexploder/PHPThumb). 注意这个类库有一个重名的叫phpThumb,只是大小写的差别,所以查找文档的时候千万注意. 在网站建设过 ...
- C#一些常用的图片操作方法:生成文字图片 合并图片等
生成文字图片: /// <summary> /// 生成文字图片 /// </summary> /// <param name="text">& ...
随机推荐
- 【jQuery】使用JQ要准备的主要淡入淡出效果
jQuery是JavaScript 库.也就是JavaScript延期,加入满足不同效果的不断增长的需求.事实上质量JavaScript 下面写的一大JQ方案说明JQ. .基本目标 网页中有例如以下三 ...
- C#使用ServiceController控制windows服务
C#在,使用ServiceController控制类windows服务,添加首次使用前引文:System.ServiceProcess,空间中引用:using System.ServiceProces ...
- linux 文件系统解析及相关命令(转)
简介 文件系统就是分区或磁盘上的所有文件的逻辑集合. 文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件.目录.软连接及文件保护信息等都存储在其中. 不同Lin ...
- Spring相框:AOP详细说明
AOP中国的名字叫做面向方面编程.这个名字是很形象.因为你真的可以把像面包切系统.并直接增加面包的修改.科而异,对整个系统,小到一定的方法. AOP它有什么用?有关示例,各组分可以含有安全.事务.,A ...
- DataNode连接错误Retrying connect to server
在Hadoop分布式模式部署完毕后,通过start-dfs.sh启动NameNode.DataNode.SecondaryNameNode,在master节点通过jps命令查看,看到NameNod ...
- 炫酷的CSS3发光搜索表单,附演示和源码
原文:炫酷的CSS3发光搜索表单,附演示和源码 昨天在国外的论坛上逛的时候,看到一篇帖子是求助如何利用CSS3实现发光效果的,网友回复中有一个推荐了一款CSS3发光搜索表单,利用CSS3的动画属性,设 ...
- Visual FoxPro 6.0~9.0解决方案和实例文档和CD写入原件下载
自从微软宣布开发冻结Visual FoxPro之后,这样的图书出版已经成为一个问题,但仍有不少VFP小贴士.处处留心此8历史书.在此提供写作的原稿.它看起来非常舒服比扫描版淘宝.下载链接:http:/ ...
- jquery初步总结
1.$(document).ready()方法和window.onload差分法 为页元件的正确操作,我们需要把操作元件JS编写的代码$(document).ready()(Jquery)或windo ...
- android tv 全屏幕垂直画
它们的定义view 采纳canvas双缓冲方式,它可以减少呈现时间.提高性能. StaggeredView.java 源码例如以下: package com.xxx.demo; import andr ...
- 基于PHP的crontab定时任务管理
BY JENNER · 2014年11月10日· 阅读次数:6 linux的crontab一直是server运维.业务开展的利器.但当定时任务增多时,管理和迁移都变得非常麻烦,并且easy出问题.以下 ...