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

ページの読み込み速度を向上させ、トラフィックを減らすために、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 までご連絡ください。
    PHPアプリケーションをより速くする方法PHPアプリケーションをより速くする方法May 12, 2025 am 12:12 AM

    tomakephpapplicationsfaster、followthesesteps:1)useopcodecachinglikeopcacheTostoredscriptbytecode.2)最小化abasequeriesecachingingindexing.3)leveragephp7機能forbettercodeefficiency.4)

    PHP依存性インジェクション:コードのテスト可能性を改善しますPHP依存性インジェクション:コードのテスト可能性を改善しますMay 12, 2025 am 12:03 AM

    依存性注入(DI)は、明示的に推移的な依存関係によりPHPコードのテスト可能性を大幅に改善します。 1)DI分離クラスと特定の実装により、テストとメンテナンスが柔軟になります。 2)3つのタイプのうち、コンストラクターは、状態を一貫性に保つために明示的な式依存性を注入します。 3)DIコンテナを使用して複雑な依存関係を管理し、コードの品質と開発効率を向上させます。

    PHPパフォーマンスの最適化:データベースクエリの最適化PHPパフォーマンスの最適化:データベースクエリの最適化May 12, 2025 am 12:02 AM

    DatabaseQueryoptimizationInpholvesseveralstrategESTOEnhancePerformance.1)selectonlynlynlyndorycolumnStoredatedataTransfer.2)useindexingtospeedupdataretrieval.3)revenmecrycachingtostoreres sultsoffrequent queries.4)

    簡単なガイド:PHPスクリプトで電子メールを送信します簡単なガイド:PHPスクリプトで電子メールを送信しますMay 12, 2025 am 12:02 AM

    phpisusededemingemailsduetoitsbuilt-inmail()functionandsupportiveLibrarieslikephpmailerandswiftmailer.1)usethemail()functionforbasicemails、butithaslimitations.2)emploadforadvancedfeatureSlikelikelivableabableabuses.3)雇用

    PHPパフォーマンス:ボトルネックの識別と修正PHPパフォーマンス:ボトルネックの識別と修正May 11, 2025 am 12:13 AM

    PHPパフォーマンスボトルネックは、次の手順で解決できます。1)パフォーマンス分析にXdebugまたはBlackfireを使用して問題を見つける。 2)データベースクエリを最適化し、APCUなどのキャッシュを使用します。 3)array_filterなどの効率的な関数を使用して、配列操作を最適化します。 4)bytecodeキャッシュ用のopcacheを構成します。 5)HTTP要求の削減や写真の最適化など、フロントエンドを最適化します。 6)パフォーマンスを継続的に監視および最適化します。これらの方法により、PHPアプリケーションのパフォーマンスを大幅に改善できます。

    PHPの依存関係注射:簡単な要約PHPの依存関係注射:簡単な要約May 11, 2025 am 12:09 AM

    依存関係(di)inphpisadesignpatternativats anducesclassodulencies、拡張測定性、テスト可能性、および維持可能性。

    PHPパフォーマンスの向上:キャッシュ戦略と技術PHPパフォーマンスの向上:キャッシュ戦略と技術May 11, 2025 am 12:08 AM

    cachingemprovesppperformancebystring of computationsorquickretrieval、還元装置の削減は、reducingerloadendenhancersponseTimes.efcectivestrategiesInclude:1)opcodecaching、compiledphpscriptsinmemorytoskipcompilation;

    See all articles

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

    完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

    ホットツール

    VSCode Windows 64 ビットのダウンロード

    VSCode Windows 64 ビットのダウンロード

    Microsoft によって発売された無料で強力な IDE エディター

    mPDF

    mPDF

    mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

    MantisBT

    MantisBT

    Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SAP NetWeaver Server Adapter for Eclipse

    SAP NetWeaver Server Adapter for Eclipse

    Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。