ホームページ >バックエンド開発 >PHPチュートリアル >画像処理アーティファクト ImageMagick および PHP imagick 拡張機能

画像処理アーティファクト ImageMagick および PHP imagick 拡張機能

WBOY
WBOYオリジナル
2016-06-23 13:52:391311ブラウズ

ページの読み込み速度を向上させ、トラフィックを減らすために、Web サイト上の画像をスリム化する必要があります。私は多くのソリューションを検討し、最終的にこのソフトウェアを使用することに決めました。宝物を見つけました。効果はあまりにも簡単です。

ImageMagick の概要:

ImageMagick は、人気のある TIFF を含む、89 を超える基本形式の画像ファイルの読み取り、書き込み、処理に使用できる、強力で安定したオープンソースのツールセットおよび開発パッケージです。 JPEG、GIF、PNG、PDF、PhotoCD 形式。 ImageMagick を使用すると、Web アプリケーションのニーズに応じて画像を動的に生成したり、画像 (または画像のグループ) にサイズの変更、回転、鮮明化、減色、特殊効果の追加を行うこともできます。同じ形式で保存することも、画像の操作はコマンド ライン、または C/C++、Perl、Java、PHP、Python、または Ruby でプログラミングすることによって行うことができます。同時に、ImageMagick は SVG を部分的にサポートする高品質の 2D ツールキットを提供します。 ImageMagic の主な焦点は、パフォーマンス、バグの削減、安定した API と ABI の提供です。

ImageMagick は、画像を作成、編集、結合するために使用されるソフトウェアです。複数の形式のイメージを読み取り、変換、書き込みできます。画像の切り取り、色の置換、各種効果の適用、画像の回転、結合、文字、直線、多角形、楕円、曲線、画像に付随する拡大・回転。 ImageMagick はフリー ソフトウェアです。すべてのソース コードはオープンであり、自由に使用、コピー、変更、配布することができます。ほとんどのオペレーティング システムをサポートします。

ImageMagick コマンドの概要 、ジッター、近接、画像上に画像を描画、新しい画像を追加、サムネイルを生成など。

識別: 1 つ以上の画像ファイルの形式と特性を説明します。

mogrify: 指定されたサイズ、ぼかし、トリミング、ディザなどに従って画像を作成します。 Mogrify は、元の画像ファイルを書き換えて、別の画像ファイルに書き込みます。

合成: 1 枚の画像または複数の画像の組み合わせに基づいて画像を生成します。

モンタージュ: いくつかの個別のフィーチャー画像を作成します。境界線、構造、画像名などの要素を含む画像内の任意の装飾画像。

比較: さまざまな画像を算術的および視覚的に評価します*** 他の変換された画像。

ディスプレイ: X サーバー システムがある場合は、画像を順番に表示できます

アニメーション: X サーバーを使用してアニメーション画像を表示します

インポート: X サーバーまたは表示可能なウィンドウに画像ファイルを出力します。 単一のウィンドウ、画面全体、または画面の任意の長方形部分をキャプチャできます。

conjure: MSL (Magick Scripting Language) で書かれたスクリプトを解釈して実行します。

インストール:

sudo apt-get install imagemagick

一般的な使用例:


画像サイズ (占有スペース) への影響は、主に画像のプロファイルと品質によって異なります。

品質: 画像の品質が高くなるほど、占有するスペースが大きくなります。品質を適切に下げると、画像のサイズを大幅に縮小できます。一般的に品質が100から85に下がると、基本的には肉眼では違いが分かりにくいですが、サイズは大きく小さくなります。 imagemagick は、-quality を渡すことで設定されます。

プロフィール: 写真の説明情報を記録します。たとえば、カメラ情報 (絞り、カメラ モデル)、Photoshop メタデータ、カラー テーブル、その他の情報です。占有容量は数 KB から数百 KB まで、場合によってはそれ以上になる可能性があります。 ImageMagicK は 2 つの方法でこの情報を削除できます。 +profile “*” または -strip

Exif 情報は、撮影プロセス中にデジタル カメラによって収集される一連の情報です。この情報は、よく知られている jpg ファイルのヘッダーに配置されます。つまり、Exif 情報が埋め込まれています。 JPEG画像ファイル形式の撮影パラメータのセット。主に、絞り、シャッター、ISO、日付と時刻、およびその時の撮影条件、カメラのブランドモデル、カラーコーディング、撮影中に録音されたサウンドに関連するその他の情報が含まれます。全地球測位システム (GPS) ) およびその他の情報。簡単に言えば、コンデジの日付印刷機能と似ていますが、Exif 情報によって記録される情報がより詳細かつ完全である点が異なります。ただし、Exif情報付きのJPEG画像ファイルは、通常のJPEGファイルよりも若干サイズが大きくなります。また、PSなどのソフトで加工した画像には「プログラムコメント」が付きます。プロの写真 Web サイトではない場合、この情報は役に立たないので削除できます:

  • convert +profile “*” -strip src.jpg src-profile.jpg
  • 画像を圧縮するには画像の品質を下げます:

    convert -quality 85 src.jpg src-quality85.jpg


    上記 2 つのコマンドは次のとおりです。組み合わせて使用​​:

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


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

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

    convert -format jpg input.png  input.jpg  

    对用户上传图片进行缩放 

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

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

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

    安装:

    1.安装imgick扩展

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

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

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

    /etc/init.d/apache2 restart

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

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

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

    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();		}	}	}



    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。