検索
ホームページバックエンド開発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的SNMP扩展?php如何使用PHP的SNMP扩展?Jun 02, 2023 am 10:22 AM

    PHP的SNMP扩展是一种使PHP能够通过SNMP协议与网络设备进行通信的扩展程序。使用该扩展可以方便地获取和修改网络设备的配置信息,例如路由器、交换机等设备的CPU、内存、网络接口等信息,也可以进行诸如开关设备端口等控制操作。本文将介绍SNMP协议的基础知识、PHP的SNMP扩展的安装方法以及如何在PHP中使用SNMP扩展进行网络设备的监控和控制。一、SN

    如何使用极光推送扩展,在PHP应用中实现批量消息推送功能如何使用极光推送扩展,在PHP应用中实现批量消息推送功能Jul 25, 2023 pm 08:07 PM

    如何使用极光推送扩展,在PHP应用中实现批量消息推送功能在移动应用的开发中,消息推送是一项非常重要的功能。极光推送是一种常用的消息推送服务,提供了丰富的功能和接口。本文将介绍如何使用极光推送扩展在PHP应用中实现批量消息推送功能。第一步:注册极光推送账号并获取API密钥首先,我们需要在极光推送官网(https://www.jiguang.cn/push)注册

    php如何使用PHP的ZipArchive扩展?php如何使用PHP的ZipArchive扩展?Jun 02, 2023 am 08:13 AM

    PHP是一种流行的服务器端语言,可以用来开发Web应用程序和处理文件。PHP的ZipArchive扩展是一个强大的工具,可以在PHP中操作zip文件。在这篇文章中,我们将介绍如何使用PHP的ZipArchive扩展来创建、读取和修改zip文件。一、安装ZipArchive扩展在使用ZipArchive扩展之前,需要确保已经安装了这个扩展。安装方法如下:1.安

    php如何使用PHP的POSIX扩展?php如何使用PHP的POSIX扩展?Jun 03, 2023 am 08:01 AM

    PHP的POSIX扩展是一组允许PHP与POSIX兼容操作系统进行交互的函数和常量。POSIX(PortableOperatingSystemInterface)是一组操作系统接口标准,旨在允许软件开发人员编写可在各种UNIX或UNIX类操作系统上运行的应用程序。本文将介绍如何使用PHP的POSIX扩展,包括安装和使用。一、安装PHP的POSIX扩展在

    php如何使用PHP的Phar扩展?php如何使用PHP的Phar扩展?May 31, 2023 pm 11:31 PM

    随着PHP的发展和应用场景的不断扩大,Phar扩展已经成为PHP编程中的重要一环。Phar是PHPArchive的缩写,它可以将多个PHP文件和资源打包成单个文件,方便进行分发和管理。本文将介绍如何使用PHP的Phar扩展来进行打包和管理。安装Phar扩展首先,我们需要检查PHP是否已经安装Phar扩展。在Linux下,通过终端输入以下命令:php-m

    教程:使用百度云推送(Baidu Push)扩展在PHP应用中实现消息推送功能教程:使用百度云推送(Baidu Push)扩展在PHP应用中实现消息推送功能Jul 26, 2023 am 09:25 AM

    教程:使用百度云推送(BaiduPush)扩展在PHP应用中实现消息推送功能引言:随着移动应用的迅猛发展,消息推送功能在应用程序中变得越来越重要。为了实现即时通知和消息推送功能,百度提供了一种强大的云推送服务,即百度云推送(BaiduPush)。在本教程中,我们将学习如何使用百度云推送扩展(PHPSDK)在PHP应用中实现消息推送功能。我们将使用百度云

    PHP和WebDriver扩展:如何模拟用户点击和输入操作PHP和WebDriver扩展:如何模拟用户点击和输入操作Jul 07, 2023 pm 05:10 PM

    PHP和WebDriver扩展:如何模拟用户点击和输入操作近年来,随着Web应用程序的快速发展,自动化测试变得越来越重要。在自动化测试中,模拟用户操作是一个关键的环节,它可以使我们更准确地测试和验证我们的应用程序。在PHP开发中,我们通常使用SeleniumWebDriver来实现自动化测试。SeleniumWebDriver是一种强大的工具,它可以模拟

    Vue如何实现组件的复用和扩展?Vue如何实现组件的复用和扩展?Jun 27, 2023 am 10:22 AM

    随着前端技术的不断发展,Vue已经成为了前端开发中的热门框架之一。在Vue中,组件是其中的核心概念之一,它可以将页面分解为更小,更易管理的部分,从而提高开发效率和代码复用性。本文将重点介绍Vue如何实现组件的复用和扩展。一、Vue组件复用mixinsmixins是Vue中的一种共享组件选项的方式。Mixins允许将多个组件的组件选项合并成一个对象,从而最大

    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衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    SAP NetWeaver Server Adapter for Eclipse

    SAP NetWeaver Server Adapter for Eclipse

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

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    Safe Exam Browser

    Safe Exam Browser

    Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

    WebStorm Mac版

    WebStorm Mac版

    便利なJavaScript開発ツール

    SecLists

    SecLists

    SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。