Jadual Kandungan
对用户上传图片进行缩放 
Rumah pembangunan bahagian belakang tutorial php 图片处理神器ImageMagick以及PHP的imagick扩展

图片处理神器ImageMagick以及PHP的imagick扩展

Jun 23, 2016 pm 01:52 PM
imagemagick imagick php Kembangkan Artifak

为了提高页面的加载速度,以及减少流量,要针对网站的图片进行瘦身,研究了很多的解决方案,最后确定了使用ImageMagick,了解了这个软件之后,真是如获至宝,简直太好用,效果太明显了。

ImageMagick介绍:

ImageMagick是一套功能强大、稳定而且开源的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF、JPEG、GIF、 PNG、PDF以及PhotoCD等格式。利用ImageMagick,你可以根据 web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存,对图片的操作,即可以通过命令行进行,也可以用C/C++、Perl、Java、PHP、Python或Ruby编程来完成。同时ImageMagick提供了一个高质量的2D工具包,部分支持SVG。ImageMagic的主要精力集中在性能,减少bug以及提供稳定的API和ABI上。

ImageMagick 是一个用来创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线, 多边形,椭圆,曲线,附加到图片伸展旋转。ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布。支持大多数的操作系统。

ImageMagick的命令概览

[ convert | identify | mogrify | composite | montage | compare | display | animate | import | conjure ]


convert:转换图像格式和大小,模糊,裁剪,驱除污点,抖动,临近,图片上画图片,加入新图片,生成缩略图等。 

identify:描述一个或较多图像文件的格式和特性。 

mogrify:按规定尺寸***一个图像,模糊,裁剪,抖动等。Mogrify改写最初的图像文件然后写到一个不同的图像文件。 

composite:根据一个图片或多个图片组合生成图片。 

montage:创建一些分开的要素图像。在含有要素图像任意的装饰图片,如边框、结构、图片名称等。 

compare:在算术上和视觉上评估不同的图片***其它的改造图片。 

display:如果你拥有一个X server的系统,它可以按次序的显示图片 

animate:利用X server显示动画图片 

import:在X server或任何可见的窗口上输出图片文件。 你可以捕获单一窗口,整个的荧屏或任何荧屏的矩形部分。 

conjure:解释执行 MSL (Magick Scripting Language) 写的脚本。


安装:

sudo apt-get install imagemagick
Salin selepas log masuk
常见用例:

影响图片大小(占用空间)主要取决于图片的profile和quality。

  • quality:图片的品质,品质越高,占用的空间越大。适当降低品质能很大程度的减少图片的尺寸。一般来说,从品质100降到85,基本上肉眼很难区别其差别,但尺寸上减少很大。imagemagick通过通过-quality 来设置。
  • profile:记录图片一些描述信息。例如相机信息(光圈,相机型号)、photoshop元数据,颜色表等信息。它占用的空间可以从几KB到几百KB,甚至可能更大。ImageMagicK可以通过两种方式来去掉这些信息。+profile “*”  或 -strip

  • Exif信息是数码相机在拍摄过程中采集的一系列信息,这些信息放置在我们熟知的jpg文件的头部,也就是说Exif信息是镶嵌在JPEG图像文件格式内的一组拍摄参数,主要包括摄影时的光圈、快门、ISO、日期时间等各种与当时摄影条件相关的讯息,相机品牌型号,色彩编码,拍摄时录制的声音以及全球定位系统(GPS)等信息。简单的说,它就好像是傻瓜相机的日期打印功能一样,只不过Exif信息所记录的资讯更为详尽和完备。不过,具有Exif信息的JPEG图像文件要比普通的JPEG文件略大一点。还有就是像PS这种软件处理过的图片会有“program comments”。如果不是专业的摄影类网站,这些信息是没有用的,可以去掉:

    convert +profile “*” -strip src.jpg src-profile.jpg
    Salin selepas log masuk

    降低图片的quality品质来压缩图片:

    convert -quality 85 src.jpg src-quality85.jpg
    Salin selepas log masuk


    上面两个命令结合到一起使用:

    find /tmp/images -iname "*.jpg" -exec convert -strip +profile "*" -quality 80 {} {} \;
    Salin selepas log masuk


    经过这两个命令的处理,你的图片绝对可以缩小很多。 PS:根据我的经验,把png图片转换为jps图片会减小很多,然后再用以上两个命令处理一下,那就完美了。

    PNG也可以通过减少PNG图片color数量的办法达到压缩的目的。但是这种办法压缩出来的图像可以明显看出来失真,而且呈锯齿状。 
    对于真实世界的PNG图片(通常指照片),一般先转换成JPG,再通过上面的办法来压缩。

    convert -format jpg input.png  input.jpg  
    Salin selepas log masuk

    对用户上传图片进行缩放 

        对于用户自己上传的图片不能简单的 用css限制大小,因为这样每次加载图片时候还是会加载整幅大图。占用多余的宽带,并且影响页面加载速度。应该根据实际显示需要进行缩放。比如我想要用户相册里的图片大小不能超过500x300: 

    convert -resize "500x300>" input.jpg  output.jpg #如果图片比500x300小就保持原样,以防小图片被放大失真。 
    Salin selepas log masuk

    下面说一下安装php的imgick扩展,来处理图片:

    安装:

    1.安装imgick扩展

    1) sudo apt-get install libmagick-dev2) sudo apt-get install php-pear php5-dev3) sudo pecl install imagick
    Salin selepas log masuk
    2.编辑php.ini文件,使其加载

    打开php.ini文件,在其中加入extension=imagick.so

    /etc/php5/apache2/php.ini
    Salin selepas log masuk
    重启apache服务使其失效

    /etc/init.d/apache2 restart
    Salin selepas log masuk

    附上一个简单的例子,用来转换图片格式的:

    $thumb = new Imagick();$thumb->readImage('test.gif');$thumb->writeImage('test.jpg');$thumb->clear();$thumb->destroy();
    Salin selepas log masuk

    用法太多了,我就不一一列举了,提供一下资料供大家学习:

    Imgick Class API:http://php.net/manual/en/class.imagick.php

    图片压缩心得:http://blog.lizhigang.net/archives/228

    ImageMagick官网:http://www.imagemagick.org/script/index.php

    http://elf8848.iteye.com/blog/382528

    使用实例:http://hi.baidu.com/7soon/item/d394c2b55bd3bb70254b09ed

    最后,附上我自己编写的PHP用Imgick处理图片的类:

    /* * 图片压缩类  重新封装了Imagick *  * @version 2014-07-30 * @author andy1219111@163.com */class Imgick_tool{		//Imagick对象实例	public $obj = null;		public function __construct()	{		//判断是否加载了该扩展		if(!extension_loaded('Imagick'))		{			return false;		}		$this->obj = new Imagick();	}	/*	 * png2jpg转换图片格式	 * 	 * @param string src_img 源图片路径	 * @param string dest_img 要生成的图片的路径	 * @return boolean 转换成共返回true  否则false	 */	public function png2jpg($src_img,$dest_img)	{		if(!is_object($this->obj))		{			return false;		}		try		{			$this->obj->readImage($src_img);			if($this->obj->writeImage($dest_img))			{				$this->destory();				return $dest_img;			}			return false;		}		catch (ImagickException $e)		{			return false;		}	}		/*	 * 去掉图片的profile信息	 * 	 * @param string src_img 源图片路径	 * @return string src_img 图片名称 否则返回false	 */	public function strip_profile($src_img,$dest_img = '')	{		if(!is_object($this->obj))		{			return false;		}		try		{			$dest_img = empty($dest_img) ? $src_img : $dest_img;			$this->obj->readImage($src_img);			$this->obj->stripImage ();			if($this->obj->writeImage ($dest_img))			{				$this->destory();				return $src_img;			}			return false;		}		catch (ImagickException $e)		{			return false;		}	}		/*	 * 设置jpg图片质量	 * 	 * @param string src_img 源图片路径	 * @param string dest_img 要生成的图片的路径	 * @return boolean 转换成共返回true  否则false	 */	public function set_quality($src_img,$quality = 70,$dest_img = '')	{		if(!is_object($this->obj))		{			return false;		}		try		{			$dest_img = empty($dest_img) ? $src_img : $dest_img;			$this->obj->readImage($src_img);			$this->obj->setImageCompression(Imagick::COMPRESSION_JPEG);			$this->obj->setImageCompressionQuality($quality);			if($this->obj->writeImage($dest_img))			{				$this->destory();				return $dest_img;			}			return false;		}		catch (ImagickException $e)		{			return false;		}	}		/*	 * 图片瘦身	 * 	 * @param string src_img 源图片路径	 * @param int quality 设置图片压缩质量	 * @param string dest_img 要生成的图片的路径	 * @return boolean 转换成共返回true  否则false	 */	public function slimming($src_img,$quality = 60,$dest_img = '',)	{		if(!is_object($this->obj))		{			return false;		}		try		{			$dest_img = empty($dest_img) ? $src_img : $dest_img;			$this->obj->readImage($src_img);			$this->obj->setImageFormat('jpeg');			$this->obj->setImageCompression(Imagick::COMPRESSION_JPEG);			//将图片的质量降低到原来的60%			$quality = $this->obj->getImageCompressionQuality() * $quality / 100;			$this->obj->setImageCompressionQuality($quality);			$this->obj->stripImage();			 			if($this->obj->writeImage($dest_img))			{				$this->destory();				return $dest_img;			}			return false;		}		catch (ImagickException $e)		{			return false;		}	}		/*	 * 生成缩略图	 * 	 * @param string src_img 源图片路径	 * @param int quality 设置图片压缩质量	 * @param string dest_img 要生成的图片的路径	 * @return boolean 转换成共返回true  否则false	 */	public function thump($src_img,$width = 250,$height = '')	{		if(!is_object($this->obj))		{			return false;		}		try		{						$file_info = pathinfo($src_img);			//生成缩略图名称			$file_name = substr($file_info['basename'],0,strrpos($file_info['basename'],'.'));			$dest_img = $file_info['dirname'] . '/' . $file_name . '_thump.' . $file_info['extension'];			$this->obj->readImage($src_img);			//计算要获得缩略图的高度			$img_width = $this->obj->>getImageWidth();			$img_height = $this->obj->>getImageHeight();			$dest_height = $img_height * ($width / $img_width);			$this->obj->resizeImage($width, $dest_height, Imagick::FILTER_CATROM, 1, false);			//生成图片			if($this->obj->writeImage($dest_img))			{				$this->destory();				return $dest_img;			}			return false;		}		catch (ImagickException $e)		{			return false;		}	}		/*	 * 释放资源	 * 	 */	function destory()	{		if(is_object($this->obj))		{			$this->obj->clear();			$this->obj->destroy();		}	}	}
    Salin selepas log masuk



    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

    Alat AI Hot

    Undresser.AI Undress

    Undresser.AI Undress

    Apl berkuasa AI untuk mencipta foto bogel yang realistik

    AI Clothes Remover

    AI Clothes Remover

    Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

    Undress AI Tool

    Undress AI Tool

    Gambar buka pakaian secara percuma

    Clothoff.io

    Clothoff.io

    Penyingkiran pakaian AI

    AI Hentai Generator

    AI Hentai Generator

    Menjana ai hentai secara percuma.

    Artikel Panas

    R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
    2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    Repo: Cara menghidupkan semula rakan sepasukan
    4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
    4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

    Alat panas

    Notepad++7.3.1

    Notepad++7.3.1

    Editor kod yang mudah digunakan dan percuma

    SublimeText3 versi Cina

    SublimeText3 versi Cina

    Versi Cina, sangat mudah digunakan

    Hantar Studio 13.0.1

    Hantar Studio 13.0.1

    Persekitaran pembangunan bersepadu PHP yang berkuasa

    Dreamweaver CS6

    Dreamweaver CS6

    Alat pembangunan web visual

    SublimeText3 versi Mac

    SublimeText3 versi Mac

    Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

    Konfigurasi Projek CakePHP Konfigurasi Projek CakePHP Sep 10, 2024 pm 05:25 PM

    Dalam bab ini, kita akan memahami Pembolehubah Persekitaran, Konfigurasi Umum, Konfigurasi Pangkalan Data dan Konfigurasi E-mel dalam CakePHP.

    Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

    PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

    Tarikh dan Masa CakePHP Tarikh dan Masa CakePHP Sep 10, 2024 pm 05:27 PM

    Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

    Muat naik Fail CakePHP Muat naik Fail CakePHP Sep 10, 2024 pm 05:27 PM

    Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

    Penghalaan CakePHP Penghalaan CakePHP Sep 10, 2024 pm 05:25 PM

    Dalam bab ini, kita akan mempelajari topik berikut yang berkaitan dengan penghalaan ?

    Bincangkan CakePHP Bincangkan CakePHP Sep 10, 2024 pm 05:28 PM

    CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

    Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

    Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

    Pengesah Mencipta CakePHP Pengesah Mencipta CakePHP Sep 10, 2024 pm 05:26 PM

    Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

    See all articles