php下尝试使用GraphicsMagick的缩略图功能
常用的图片处理工具有GD,ImageMagick,GraphicsMagick等等。GD就是个阿斗,略过不提;ImageMagick是目前最流行的图片处理工具,它的功能非常丰富;GraphicsMagick的功能略逊于ImageMagick,但是它的效率更强悍,就好比Apache和Nginx一样,一个功能更强,一个效率更胜。
现在更看重效率,所以本文就以GraphicsMagick为例来说说:
对于PHPer来说,有两种使用GraphicsMagick的方式:
1:使用PECL Gmagick扩展。
2:使用GraphicsMagick命令行。
PECL扩展的方式我并不喜欢,一来PECL代码Bug多多,二来PECL扩展的实现,代码写起来很罗嗦:比如缩放一个GIF动画图片,如果你用命令行的方式,一句话就搞定,而用PECL扩展的话,还得先算动画有几帧,再循环处理,很麻烦。所以说我更倾向于使用命令行的方式,虽然命令行操作听起来很“重”,但如果建立若干台图片服务器,通过Gearman连接起来,其实很是很有弹性的。
下面我们就以GraphicsMagick为例,采用命令行的方式来看看如何使用缩略图功能:
先上一个原始图片(input.jpg:160x120),以后的各个例子都会用到它:
BTW:列位看官现在可以咽口水了。
缩略图1
gm convert input.jpg -thumbnail '100x100' output_1.jpg
实际生成的图片大小是:100x75,也就是说说按此命令,会保持图片比例不变生成缩略图。这样很不错,但是有一个潜在的问题:我们不能简单明了的知道图片的最终大小,结果是前端显示的时候,无法设置img标签的width和height属性,如果我没记错的话,一般是推荐设定width和height属性的,否则浏览器渲染起来可能会稍稍慢一点。
缩略图2
gm convert input.jpg -thumbnail '100x100!' output_2.jpg
这次实际生成的图片大小按定义来,但图片变形了,有时候这是不能接受的。
缩略图3
gm convert input.jpg -thumbnail '100x100^' \
-gravity center -extent 100x100 output_3.jpg
这次不仅保证了大小,还保证了比例。不过图片经过了裁剪。
缩略图4
gm convert input.jpg -thumbnail '100x100' \
-background gray -gravity center -extent 100x100 output_4.jpg
这次不仅保证了大小,还保证了比例,同时没有对图片进行任何裁剪,多余的部分按指定颜色进行填充。
缩略图5
gm convert input.jpg -thumbnail '10000@' \
-background gray -gravity center -extent 100x100 output_5.jpg
这次保证了大小和比例,其中的10000就是100x100的乘积,同时在填充和裁剪之间做了一个平衡。
明白了以上几个例子,缩略图基本就能通吃了,肯定有一种会适合你的需求。GraphicsMagick的资料非常少,但好消息是GraphicsMagick和ImageMagick的用法基本兼容,所以你可以通过ImageMagick的资料来套用。
补充:如果想让用户手动裁剪头片的话,imgAreaSelect是个好选择。
相关推荐
-
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
1. 截取整个屏幕 Screenshot 复制代码 代码如下: <?php $im = imagegrabscreen(); imagepng($im, "myscreenshot.png"); ?> 2. 截取一个窗口 Capture a window (IE for example) 复制代码 代码如下: <?php $browser = new COM("InternetExplorer.Application");
-
PHP用GD库生成高质量的缩略图片
以下是PHP源代码(ResizeImage.php). 复制代码 代码如下: <?php $FILENAME="image.thumb"; // 生成图片的宽度 $RESIZEWIDTH=400; // 生成图片的高度 $RESIZEHEIGHT=400; function ResizeImage($im,$maxwidth,$maxheight,$name){ $width = imagesx($im); $height = imagesy($im); if(($maxwidt
-
php图片的裁剪与缩放生成符合需求的缩略图
图片太大且规格不统一,显示的控制需要靠JavaScript来完成,用在移动设备上时显示效果不好且流量巨大,需要对现有图片库的图片进行一次处理,生成符合移动设备用的缩略图,将原来客户端JS做的工作转移到服务器端用PHP的GD库来集中处理. 图片源与需要的大小: 复制代码 代码如下: $src_img = "wallpaper.jpg"; $dst_w = 300; $dst_h = 200; 剪裁图像,保证图像区域最大化显示,并按比例缩放到指定大小. 一开始采用了 imagecopyre
-
php生成缩略图示例代码分享(使用gd库实现)
复制代码 代码如下: <form method="post" action="suo_do.php" enctype="multipart/form-data"> <input type="file" name="pic" /> <input type="submit" value="上传1" /> </form&
-
兼容性比较好的PHP生成缩略图的代码
复制代码 代码如下: function ImageResize($srcFile,$toW,$toH,$toFile="") { if($toFile==""){ $toFile = $srcFile; } $info = ""; $data = GetImageSize($srcFile,$info); switch ($data[2]) { case 1: if(!function_exists("imagecreatefromgi
-
PHPThumb PHP 图片缩略图库
1.这是一个缩略图类库 它是一个开源的图片缩略图类库,可以完成多种复杂的图片缩略图生成和现实,使用起来非常的方便. 2.使用方法 这里有一篇关于其简单实用的说明,英文比较简单,就不翻译了: Basic-Usage 3.API 这里有一个API列表: PHPThumb API 不过非常可惜,API中并没有任何说明,只能对照其英文名称猜测其效果,当然即使猜对了,也要测试下看看是否是正确的. 4.样例 这里我也写了个简单调用它的方法,不过我是把该图片保存成为文件了,basic-usage中的例子全是直
-
PHP使用imagick读取PDF生成png缩略图的两种方法
一.ImageMagick是什么ImageMagick是一套功能强大.稳定而且免费的工具集和开发包,可以用来读.写和处理超过185种基本格式的图片文件,包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等格式.利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小.旋转.锐化.减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存.二.php_imagick什么一个可以供PHP调用ImageMagick功
-
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
裁剪示例: 最终裁剪成的图片: 其中虚线框内就是要裁剪出来的图片,最终保存成100宽的图片.代码如下: 复制代码 代码如下: $src_path = '1.jpg';//创建源图的实例$src = imagecreatefromstring(file_get_contents($src_path)); //裁剪开区域左上角的点的坐标$x = 100;$y = 12;//裁剪区域的宽和高$width = 200;$height = 200;//最终保存成图片的宽和高,和源要等比例,否则会变形$fi
-
php实现上传图片生成缩略图示例
功能很简单,代码中有注释,直接给大家上代码了 复制代码 代码如下: <?php/** * 上传图片生成缩略图 * * 需要GD2库的支持 * * 初始化时需要参数new thumbnails('需要缩略的图片的原始地址','缩略图的宽度','缩略图的高度','(可选参数)缩略图的保存路径'); * 如果最后一个参数不指定,那么缩略图就默认保存在原始图片的所在目录里的small文件夹里, * 如果不存在small文件夹,则会自动创建small文件夹 * * 初始化之后需要调用方法produc
-
php生成缩略图填充白边(等比缩略图方案)
网站上传图片后生成缩略图应该是非常常用的功能了,通常来讲为了网站显示美观,缩略图会是同样尺寸,比如最近笔者做的一个站点,缩略图规格要求都是160×120.但是如果上传的图片比例和缩略图不一致,直接缩放的话就会导致图片变形,这样体验肯定就不好了.于是笔者想了一个折中的办法,就是缩小后添加白边的方法. 源图,尺寸是600×366: 最终生成的效果图: 代码相对比较长些,下面简单说下思路: 先将源图按比例生成缩略图,并且宽不大于160.高不大于120.例如上图会先生成160×98的缩略图.新建一个16
-
php利用GD库生成缩略图示例
php利用GD库生成缩略图. 复制代码 代码如下: <form method="post" action="suo_do.php" enctype="multipart/form-data"> <input type="file" name="pic" /> <input type="submit" value="上传1" /> &
-
基于PHP服务端图片生成缩略图的方法详解
复制代码 代码如下: <?php//定义缩略图片尺寸$picSize = array( '100_100'=> 1, '200_100'=> 1 );$imagePath = "../image/";function parseUrl($url){ preg_match("/(?P<name>[\w\d]+)_w(?P<width>\d+)_h(?P<h
-
php 根据url自动生成缩略图并处理高并发问题
服务器生成缩略图的时机一般分为两种: 1.上传文件时生成 优点:上传时就已经生成需要的缩略图,读取时不需要再判断,减少cpu运算. 缺点:当缩略图尺寸变化时或新增尺寸时,需要重新生成所有的缩略图. 2.访问时生成 优点:1.当有用户访问时才需要生成,没有访问的不用生成,节省空间. 2.当修改缩略图尺寸时,只需要修改设置,无需重新生成所有缩略图. 缺点:当缩略图不存在需要生成时,高并发访问会非常耗服务器资源. 虽然访问时生成会有高并发问题,但其他优点都比第一种方法好,因此只要解决高并发问题就可以.
-
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
废话不说了,贴代码: 复制代码 代码如下: <?php /************************************ //函数: watermark($bigimg, $smallimg, $coord = 1) //作用: 添加水印 //参数: $bigimg 必选.大图片--要加上水印的图片 $smallimg 必选.小图片 $coord 可选.水印在大图中的位置, 1 左上角: 2 右上角: 3 右下角: 4 左下角: 5 中间 //示例: watermark('datu.p
-
完美实现GIF动画缩略图的php代码
下面通过一个取自CS警匪游戏的GIF动画来说明问题: GIF动画图片:old.gif 为了让问题更加清晰,我们先还原动画各帧: 选择一:用PHP中的Imagick模块: 复制代码 代码如下: <?php $image = new Imagick('old.gif'); $i = 0; foreach ($image as $frame) { $frame->writeImage('old_' . $i++ . '.gif'); } ?> 选择二:用ImageMagick提供的conver
-
PHP缩略图等比例无损压缩,可填充空白区域补充色
复制代码 代码如下: <?php error_reporting( E_ALL ); // 测试 imagezoom('1.jpg', '2.jpg', 400, 300, '#FFFFFF'); /* php缩略图函数: 等比例无损压缩,可填充补充色 author: 华仔 主持格式: bmp .jpg .gif.png param: @srcimage : 要缩小的图片 @dstimage : 要保存的图片 @dst_width: 缩小宽 @dst_height: 缩小高 @backgroun
-
兼容性最强的PHP生成缩略图的函数代码(修改版)
复制代码 代码如下: function ImageResize($srcFile,$toW,$toH,$toFile="") { if($toFile==""){ $toFile = $srcFile; } $info = ""; $data = GetImageSize($srcFile,$info); switch ($data[2]) { case 1: if(!function_exists("imagecreatefromgi
-
php 缩略图实现函数代码
array getimagesize ( string $filename [, array &$imageinfo ] ) 取得图像大小 resource imagecreatetruecolor ( int $x_size , int $y_size ) 新建一个真彩色图像 resource imagecreatefromjpeg ( string $filename ) 从 JPEG 文件或 URL 新建一图像 bool imagecopyresized ( resource $dst_i
随机推荐
- C++常用字符串分割方法实例汇总
- 为什么用磁盘序列号加密过的代码不能被复制安装?
- vue教程之toast弹框全局调用示例详解
- java的poi技术读取和导入Excel实例
- Java使用SFTP上传文件到服务器的简单使用
- js复制网页内容并兼容各主流浏览器的代码
- JS代码判断集锦大全第1/5页
- jQuery 相关控件的事件操作分解
- centos7云主机系统下挂载磁盘的方法
- 超详细的javascript数组方法汇总
- 如何保护局域网的共享文件夹?
- 全面理解java中的异常处理机制
- js的三种继承方式详解
- 推荐免费个人网络空间
- 大家应该掌握的多线程编程
- React中嵌套组件与被嵌套组件的通信过程
- android 之listview 优化方法
- Python处理时间日期坐标轴过程详解
- mybatis自定义类型处理器TypehHandler示例详解
- Python中的Django基本命令实例详解