PHP令我们惊喜的就是在图形图象处理方面要忧于ASP,用GD库PHP就可以轻松的实现缩略图。这一篇文章我们的目的就是用GD来生成缩略图,PHP可以把缩略图直接生成输送到浏览器也可以以文件的形式把其存储到硬盘当中。
在生成缩略图的过程当中我们需要用到GD库当中的几个函数:
getimagesize(string filename [,array var])),取得图像的信息,返回值是一人array,包括几项信息$var[0]----返回图像的width,$var[1]----返回 height,[2]返回图像文件的type,[4]返回的是与当中的wdith,height有关的width="",height=""信息。
imageX(resource image)
imageY(resource image) 返回图像的宽和高
imagecopyresized(des img,src img,int des_x,int des_y,int src_x,int src_y,int des_w,int des_h,int src_w,int src_y) 复制并截取区域图像
imagecreatetruecolor(int width,int height) 创建一个真彩图imagejpeg(resource image)
下面就是Code:
# Constants
define(IMAGE_BASE, '/var/www/html/mbailey/images'); define(MAX_WIDTH, 150);
define(MAX_HEIGHT, 150);
# Get image location
$image_file = str_replace('..', '',
$_SERVER['QUERY_STRING']);
$image_path = IMAGE_BASE . "/$image_file";
# Load image
$img = null;
$ext = strtolower(end(explode('.', $image_path)));
if ($ext == 'jpg' || $ext == 'jpeg') {
$img = @imagecreatefromjpeg($image_path);
} else if ($ext == 'png') {
$img = @imagecreatefrompng($image_path);
# Only if your version of GD includes GIF support
} else if ($ext == 'gif') {
$img = @imagecreatefrompng($image_path);
}
# If an image was successfully loaded, test the image for size
if ($img) {
# Get image size and scale ratio
$width = imagesx($img);
$height = imagesy($img);
$scale = min(MAX_WIDTH/$width, MAX_HEIGHT/$height);
# If the image is larger than the max shrink it
if ($scale < 1) {
$new_width = floor($scale*$width);
$new_height = floor($scale*$height);
# Create a new temporary image
$tmp_img = imagecreatetruecolor($new_width, $new_height);
# Copy and resize old image into new image
imagecopyresized($tmp_img, $img, 0, 0, 0,
0,$new_width, $new_height, $width, $height);
imagedestroy($img);
$img = $tmp_img;
}
}
# Create error image if necessary
if (!$img) {
$img = imagecreate(MAX_WIDTH, MAX_HEIGHT);
imagecolorallocate($img,0,0,0);
$c = imagecolorallocate($img,70,70,70);
imageline($img,0,0,MAX_WIDTH,MAX_HEIGHT,$c2);
imageline($img,MAX_WIDTH,0,0,MAX_HEIGHT,$c2);
}
# Display the image
header("Content-type: image/jpeg");
imagejpeg($img);
?>
我们把上面的Code存储为test.php,然后通过test.php?image name的形式来访问,结果会让你惊喜的,因为在这里你看到了PHP的优点,它可以让ASP相形见绌。
上面的这段代码当中我们通过end(explode(".",$image_path)来取得文件的扩展名,但是我感觉还是不理想。这样是能够取得文件的类型的,因为end()函数会跳到本array的最后一个单元,但是如果我们采用getimagesize()会取得更为强大的专门针对于图像文件的类型。
本程序显示的缩略图是限制宽高都在150内,然后用min()函数来取得它们比值的最小值来计算缩略图的宽和高,并且通过一系列的GD库函数来取得相应的信息,并且呈现给浏览器,当然你也可以写到你所使用的硬盘当中。
好了,这就是PHP的缩略图功能,大家觉得有什么好的意见可以多多拍砖!
先用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("