在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在使用php开发之中大家都习惯使用gb类库来处理图像信息,但是函数很多的gb类库也是很头疼,使用起来要一个个的查询函数和看官方手册,下面将介绍一个很强大的图像处理工具----ImageMagick,这个在liunx下面处理图像信息将会更简洁。 先看一下百度百科的介绍: convert -resize "500x300>" input.jpg output.jpg #如果图片比500x300小就保持原样,以防小图片被放大失真。 2.生成不同比例缩略图 一般相册等应用,都会提供缩略图和预览图,这些缩略图同样不能简单的用css来限制大小,要为每个图片生成不同比例的预览图。 3.去除多余信息 Exif信息是数码相机在拍摄过程中采集的一系列信息,这些信息放置在我们熟知的jpg文件的头部,也就是说Exif信息是镶嵌在JPEG图像文件格式内的一组拍摄参数,主要包括摄影时的光圈、快门、ISO、日期时间等各种与当时摄影条件相关的讯息,相机品牌型号,色彩编码,拍摄时录制的声音以及全球定位系统(GPS)等信息。简单的说,它就好像是傻瓜相机的日期打印功能一样,只不过Exif信息所记录的资讯更为详尽和完备。不过,具有Exif信息的JPEG图像文件要比普通的JPEG文件略大一点。还有就是像PS这种软件处理过的图片会有“program comments”。如果不是专业的摄影类网站,这些信息是没有用的,可以去掉: convert -strip input.jpg output.jpg 4.调节压缩比 大多时候,我们的网站并不需要那么清晰的图片,适量调节JPG图片的压缩比会减少图片大小,肉眼并不会分辨出质量被压缩后的图片。通常75%是最佳比例。 convert -quality 75% input.jpg output.jpg 上面几个步骤可以一次搞定: convert -resize "500x300" -strip -quality 75% input.jpg output.jpg 上面说的都是针对JPG格式的处理方式,下面说一下BMP,GIF,PNG等格式的处理。 对于BMP直接转成JPG就可以了。再按照上面的方式处理。 而GIF和PNG貌似有些特殊。GIF的一些特性(动画效果,透明等)是JPG没有的,可以根据实际情况选择转或不转,如果转换成jpg,取第一帧只需要这样: convert -format jpg input.gif input.jpg PNG也可以通过减少PNG图片color数量的办法达到压缩的目的。但是这种办法压缩出来的图像可以明显看出来失真,而且呈锯齿状。 对于真实世界的PNG图片(通常指照片),一般先转换成JPG,再通过上面的办法来压缩。 但是要注意一点,透明或半透明的PNG图片在转换成JPG时透明部分会变成黑色。。。建议做用户头像时候不要转成JPG。。很难看~~~ 本人头像就是深受毒害。。 关于图片扩展名 发现大部分网站喜欢把用户上传的图片(头像,相册等)都统一转成特定格式(一般都是jpg)。这样做的潜在弊端就是在用像ImageMagick这样的软件处理的时候会根据扩展名做隐式格式转换。 个人觉得在保存图片的时候不加扩展名处理起来更灵活一些。
注:把上面的命令行用mini_magick改写用到rails里很容易的。mini_magick本质就调用系统命令行嘛~~ /** * @filesource upload.func.php * 上传图片, 需要 ImageMagick */ /** * 上传文件 *$size:大小(格式100x100,中间是小写x) * 返回值: * 0 文件类型错误 */ function upFile($size, $subdir){ set_time_limit(0); $fileType = array("jpg","gif","bmp","jpeg","png"); $upPath = dirname(dirname(dirname(__FILE__))) .DIRECTORY_SEPARATOR.'rooms'.DIRECTORY_SEPARATOR.'Img' .DIRECTORY_SEPARATOR.$subdir.DIRECTORY_SEPARATOR; // if(file_exists($upPath)) unlink($upPath);mkdir($upPath); if( !is_dir($upPath)) mkdir($upPath); $a = strtolower( pathinfo($_FILES['uploadfile']['name'], PATHINFO_EXTENSION) ); //判断文件类型 if(!in_array( $a, $fileType )) { //$text=implode(",",$fileType); return 2; //echo "您只能上传以下类型文件: ",$text,"<br>"; } else{ //生成目标文件的文件名 $filename=explode(".", $_FILES['uploadfile']['name']); do{ $filename[0]=$size; //图片名称按尺寸命名 $name=implode(".", $filename); $uploadfile= $upPath.$name; }while( file_exists($uploadfile) ); try { if ( copy($_FILES['uploadfile']['tmp_name'], $uploadfile) ){ ///usr/bin/convert exec("/usr/local/imagemagick/bin/convert -resize '{$size}>!' {$uploadfile} {$uploadfile}"); return "/kkyoo/rooms/icoImg/{$subdir}/".$name; } }catch (Exception $e){ echo $e->getMessage(); } } return 0; }//END func upFile
|
2022-08-18
2022-07-08
2022-08-17
2022-11-06
2022-08-15
请发表评论