画像処理アーティファクト 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 は、元の画像ファイルを書き換えて、別の画像ファイルに書き込みます。
モンタージュ: いくつかの個別のフィーチャー画像を作成します。境界線、構造、画像名などの要素を含む画像内の任意の装飾画像。
比較: さまざまな画像を算術的および視覚的に評価します*** 他の変換された画像。
ディスプレイ: 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
打开php.ini文件,在其中加入extension=imagick.so
/etc/php5/apache2/php.ini
/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(); } } }

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、
