using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
///
/// 图片处理类
/// 1、生成缩略图片或按照比例改变图片的大小和画质
/// 2、将生成的缩略图放到指定的目录下
///
public class ImageClass
{
public Image ResourceImage;
private int ImageWidth;
private int ImageHeight;
public string ErrMessage;
///
/// 类的构造函数
///
/// 图片文件的全路径名称 public ImageClass(string ImageFileName)
{
ResourceImage=Image.FromFile(ImageFileName);
ErrMessage= " ";
}
public bool ThumbnailCallback()
{
return false;
}
///
/// 生成缩略图重载方法1,返回缩略图的Image对象
///
/// 缩略图的宽度
/// 缩略图的高度
///
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;
}
}
///
/// 生成缩略图重载方法2,将缩略图文件保存到指定的路径
///
/// 缩略图的宽度
/// 缩略图的高度
/// 缩略图保存的全文件名,(带路径),参数格式:D:\Images\filename.jpg
///
public bool GetReducedImage(int Width,int Height,string targetFilePath)
{
try
{
Image ReducedImage;
Image.GetThumbnailImageAbort callb=new Image.GetThumbnailImageAbort(ThumbnailCallback);
ReducedImage=ResourceImage.GetThumbnailImage(Width,Height,callb,IntPtr.Zero); ReducedImage.Save(@targetFilePath,ImageFormat.Jpeg);
ReducedImage.Dispose();
return true;
}
catch(Exception e)
{
ErrMessage=e.Message;
return false;
}
}
///
/// 生成缩略图重载方法3,返回缩略图的Image对象
///
/// 缩略图的宽度百分比如:需要百分之80,就填0.8
///
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.Width*Percent);
ReducedImage=ResourceImage.GetThumbnailImage(ImageWidth,ImageHeight,callb,IntPtr.Zero);
return ReducedImage;
}
catch(Exception e)
{
ErrMessage=e.Message;
return null;
}
}
///
/// 生成缩略图重载方法4,返回缩略图的Image对象
///
/// 缩略图的宽度百分比如:需要百分之80,就填0.8
/// 缩略图保存的全文件名,(带路径),参数格式:D:\Images\filename.jpg
///
public bool GetReducedImage(double Percent,string targetFilePath)
{
try
{
Image ReducedImage;
Image.GetThumbnailImageAbort callb=new Image.GetThumbnailImageAbort(ThumbnailCallback);
ImageWidth=Convert.ToInt32(ResourceImage.Width*Percent);
ImageHeight=Convert.ToInt32(ResourceImage.Width*Percent);
ReducedImage=ResourceImage.GetThumbnailImage(ImageWidth,ImageHeight,callb,IntPtr.Zero); ReducedImage.Save(@targetFilePath,ImageFormat.Jpeg);
ReducedImage.Dispose();
return true;
}
catch(Exception e)
{
ErrMessage=e.Message;
return false;
}
}
}
先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker 模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。 AD:客户要求用程序生成标准的word文档,要能打印,而且不能变形,以前用过很多解决方案,都在客户严格要求下牺牲的无比惨烈。 POI读word文档还行,写文档实在不敢恭维,复杂的样式很难控制不提,想象一下一个20多页,嵌套很多表格和图像的word文档靠POI来写代码输出,对程序员来说比去山西挖煤还惨,况且文档格式还经常变化。 iText操作Excel还行。对于复杂的大量的word也是噩梦。 直接通过JSP输出样式基本不达标,而且要打印出来就更是惨不忍睹。 Word从2003开始支持XML格式,用XML还做就很简单了。 大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml 翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。 看看实际效果 首先用office【版本要2003以上,以下的不支持xml格式】编辑文档的样式,图中红线的部分就是我要输出的部分:
将编辑好的文档另存为XML 再用Firstobject free XML editor将xml中我们需要填数据的地方打上FreeMarker标记
这篇文章主要介绍了PHP使用imagick读取PDF第一页生成png缩略图的两种方法,使用了PHP扩展php_imagick,需要的朋友可以参考下 一、ImageMagick是什么 ImageMagick是一套功能强大、稳定而且免费的工具集和开发包,可以用来读、写和处理超过185种基本格式的图片文件,包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD 等格式。利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存。 二、php_imagick什么 一个可以供PHP调用ImageMagick功能的PHP扩展。使用这个扩展可以使PHP具备和ImageMagick相同的功能。 三、PDF生成png缩略图的两种方法 第一种: 代码如下:/** * PDF2PNG * @param $pdf 待处理的PDF文件 * @param $path 待保存的图片路径 * @param $page 待导出的页面-1为全部0为第一页1为第二页 * @return 保存好的图片路径和文件名 */ function pdf2png($pdf,$path,$page=0) { if(!is_dir($path)) { mkdir($path,true); } if(!extension_loaded('imagick')) { echo '没有找到imagick!' ; return false; } if(!file_exists($pdf)) { echo '没有找到pdf' ; return false; } $im = new Imagick(); $im->setResolution(120,120); //设置图像分辨率 $im->setCompressionQuality(80); //压缩比 $im->readImage($pdf."[".$page."]"); //设置读取pdf的第一页 //$im->thumbnailImage(200, 100, true); // 改变图像的大小 $im->scaleImage(200,100,true); //缩放大小图像
图片缩略图和原图不一样 在正常情况下一个图片和它的缩略图应该是一样的,但是在有的时候会出现图片和缩 略图完全不一样的情况。也就是说用Windows自带的图片查看器看到的图片是一个样子,而 这些图片在文件夹中“预浏览”或者“缩略图”看到的却是完全另一个样子。 出现这种情况是因为在Windows缩略图中有一个Bug,利用这个Bug,Exifer就能够轻松 制作图片和缩略图不同的图片。 一、缩略图原理 这是什么原理呢?因为现在JPEG的文件采用了压缩的方式,其过程比较复杂。为了能 让大家快速查看其缩略图,JPEG标准在文件中记录了一些EXIF 信息。数码照相机拍出的图 片带有相机的很多参数,这都属于EXIF信息,其中缩略图也是一部分。缩略图是一幅较小 的JPEG图片,存储在EXIF信息段。支持EXIF信息内嵌缩略图数据库的片格式的图片除了JP EG格式(.jpg、.jpeg、.jpe),还有PSD、PDD、EPS、TIF、TIFF 等格式。 而Windows在第一次显示缩略图时先读当前目录中的“Thum
bs.db”这个文件,其实这 是一个缩略图数据库,从而来判断是否有该图片的缩略图。如果不存在“Thumbs.db”文件 或者该库中不存在该图片的缩略图,那么Windows会尝试取图片中的EXIF信息,判断是否存 在缩略图数据。如果图片中EXIF信息中不存在缩略图信息或信息错误,那么Windows就会用 插值的方法重新生成缩略图(如果可能则保存到当前目录中的“Th umbs.db”缩略图数据库 中)。 二、如何制作缩略图 了解了这些,既然知道原理,那么我们能否也做出这样的图片呢?其实很简单,只需 通过修改EXIF信息中的缩略图信息达到上面那种奇异的效果了。那么用什么软件能够修改 EXIF信息呢?这里笔者给大家介绍一款名字为Exifer 软件,通过它就可以很轻松的修改E XIF信息。 第一步:首先打开Exifer,选择要进行添加要修改的图片(图1)。 第二步:图片添加好之后,会在右边EXIF thumbnail中看到图片的缩略图,这时候按鼠标
Java 图片处理(包括 Jmagick 的应用) 图片处理( 的应用)
作者: 佚名, 出处:IT 专家网,
2010-10-29 08:30
责任编辑: 谢妍妍,
近期有使用到图片的压缩处理,由于在之前用 Java 处理时,在低像素的情况下, Java 处理的效果确实很差,然后尝试了用网上推荐的免费开源的第三方软件,利用 Java 的 jni 调用 dll 文件进行处理,效果还可以。在此记录下,方便以后继续积累。
近期有使用到图片的压缩处理, 由于在之前用 Java 处理时, 在低像素的情况下, Java 处理的效果确实很差,然后尝试了用网上推荐的免费开源的第三方软件,利用 Java 的 jni 调用 dll 文件进行处理,效果还可以。在此记录下,方便以后继续积累。
1、纯 Java 类处理图片代码
Java 代码
以下是代码片段: 以下是代码片段: /** * 转换图片大小,不变形 * * @param img * 图片文件 * @param width * 图片宽 * @param height * 图片高 */ public static void changeImge(File img, int width, int height) { try { Image image = ImageIO.read(img); //图片尺寸的大小处理, 如果长宽都小于规定大小, 则返回, 如果有一个大于规定大小, 则等比例缩放 int srcH = image.getHeight(null); int srcW = image.getWidth(null); if (srcH <= height && srcW <= width) { return;
public class PicCreateCtrl extends HttpServlet{ public PicCreateCtrl(){ super(); } public void destroy(){ super.destroy();//Just puts"destroy"string in log //Put your code here } public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ doPost(request,response); } public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ response.setContentType("text/html;charset=gb2312"); PrintWriter out=response.getWriter(); SmartUpload mySmartUpload=new SmartUpload();//creat new SmartUpload object long file_size_max=10000000;//the bigest size of file String fileExt=""; String url="temp/";//the path of save upload file mySmartUpload.initialize(this.getServletConfig(),request,response); try{ mySmartUpload.setAllowedFilesList("png,emf,bmp,jpg,gif,BMP,JPG,GIF,PN G,EMF"); //上载文件 mySmartUpload.upload(); }catch(Exception e){ e.printStackTrace(); out.print(""); } try{ BaseduManager manager=new BaseduManager(); File myFile=mySmartUpload.getFiles().getFile(0); String xh=mySmartUpload.getRequest().getParameter("xcxh"); if(myFile.isMissing()){ out.print("