GD ライブラリは通常、PHP マッピングに使用されます。これは組み込みであり、サーバーに追加のプラグインをインストールする必要がないため、メインの機能であればより安心して使用できます。画像を処理するプログラムである場合、 GD は非効率であるだけでなく、機能が比較的弱く、また GD の creatfrom??? も大量のシステム リソースを消費するため、 GD の使用はお勧めできません。このため、最近 GD に変更したプロジェクトの 1 つが imagick に変更されましたが、変更後にいくつかの状況が発生したので、ここで共有したいと思います。
まず、ここでの状況について話させてください:状況1: 画像操作クラスを書き換える必要がある
状況 2: imagick のマルチスレッドにより CPU 使用率が 100% に急増します
ちなみに、imagick を centos6.4 にインストールする方法は次のとおりです:
リーリー
次に、上記の 2 つの状況に対する解決策を提案します。
状況 1 の解決策は次のとおりです:
狀況二的解決辦法如下: 首先用/usr/local/imagemagick/bin/convert -version指令查看一下輸出內容是否已經開啟了多線程,Features:的值為空說明是單線程,如果Features:的值是openMP說明是多線程.imagick的多線程模式有一個bug,他會導致多核心的cpu使用率瞬間飆升到100%.所以一定要使用它的單線程模式才行. 上邊是我配置正確時顯示的結果,如果沒有配置正確會顯示下邊的結果 第一種結果是單線程模式,第二種結果是多線程模式,因為imagick的多線程模式有bug,所以如果您剛開始是用多線程模式安裝的imagick那就必須要yum remove imagemagick將其卸載掉重新安裝才行. 經過重寫class,重裝imagick之後一切正常,而且處理圖像的效能比之以前有了大幅提升 1 /**
2 Imagick圖像處理類
3 使用法:
4 //Imagick 物件の導入
5 if(!define('CLASS_IMAGICK')){require(Inc.'class_imagick.php');}
6 $Imagick=new class_imagick();
7 $Imagick->open('a.gif');
8 $Imagick->resize_to(100,100,'scale_fill');
9 $Imagick->add_text('1024i.com',10,20);
10 $Imagick->add_watermark('1024i.gif',10,50);
11 $Imagick->save_to('x.gif');
12 unset($Imagick);
13 /**/
14
15 定義('CLASS_IMAGICK',TRUE);
16 クラス class_imagick{
17 プライベート $image=null;
18 プライベート $type=null;
19
20 // 構造
21 パブリック 関数 __construct(){}
22
23 // 析構
24 public function __destruct(){
25 if($this->画像!==null){$this->画像->destroy();}
26 }
27
28 // 載せ圖画像
29 パブリック 関数 open($path){
30 if(!file_exists($path)){
31 $this->image=null;
32 戻る ;
33 }
34 $this->image=new Imagick($path);
35 if($this->画像){
36 $this->type=strto lower($this->image->getImageFormat());
37 }
38 $this->画像->stripImage();
39 戻る $this->画像;
40 } 41
42 /**
43 圖像裁切
44 /**/
45 public function Crop($x=0,$y=0,$width=null,$height=null){
46 if($width==null) $width=$this->image->getImageWidth()-$x;
47 if($height==null) $height=$this->image->getImageHeight()-$y;
48 if($幅$高さreturn;
49
50 if($this->type=='gif'){
51 $image=$this->image;
52 $canvas=new Imagick();
53
54 $images=$image->coalesceImages();
55 foreach($images as $frame){
56 $img=new Imagick();
57 $img->readImageBlob($frame);
58 $img->cropImage($幅,$高さ,$x,$y);
59
60 $canvas->addImage($img);
61 $canvas->setImageDelay($img->getImageDelay());
62 $canvas->setImagePage($width,$height,0,0);
63 }
64
65 $image->destroy();
66 $this->image=$canvas;
67 }他{
68 $this->image->cropImage($width,$height,$x,$y);
69 }
70 } 71
72/**
73 画像サイズを変更する
74 パラメータ:
75 $width: 新しい幅
76 $height: 新しい高さ
77 $fit: サイズに合わせてください
78 'force': 画像を $width X $height に強制します
79 'scale': $width X $height 内で画像を比例的に拡大縮小します。結果は $width X $height と正確には等しくなりません
80 'scale_fill': $width 内で画像を比例的に拡大縮小します)
81 その他: スマート モード、画像をズームし、中心から $width X $height のサイズにトリミングします
82 注:
83 $fit='force','scale','scale_fill' の場合に完全な画像を出力します
84 $fit=画像の向きを使用する場合、指定された位置に画像を出力します。
85 文字と画像の対応関係は以下の通りです。
86 北西 北北東
87 西中東
88 南西南南東
89 /**/
90 public functionsize_to($width=100,$height=100,$fit='center',$fill_color=array(255,255,255,0 )){
91 スイッチ($fit){
92 ケース '力':
93 if($this->type=='gif'){
94 $image=$this->image;
95 $canvas=new Imagick();
96
97 $images=$image->coalesceImages();
98 foreach($images as $frame){
99 $img=new Imagick();
100 $img->readImageBlob($frame);
101 $img->サムネイル画像($幅,$高さ,false);
102
103 $canvas->addImage($img);
104 $canvas->setImageDelay($img->getImageDelay());
105 }
106 $image->destroy();
107 $this->image=$canvas;
108 }他{
109 $this->画像->サムネイル画像($幅,$高さ,false);
110 }
111 休憩;
112 ケース 'スケール':
113 if($this->type=='gif'){
114 $image=$this->image;
115 $images=$image->coalesceImages();
116 $canvas=new Imagick();
117 foreach($images as $frame){
118 $img=new Imagick();
119 $img->readImageBlob($frame);
120 $img->サムネイル画像($幅,$高さ,true);
121
122 $canvas->addImage($img);
123 $canvas->setImageDelay($img->getImageDelay());
124 }125 $image->destroy();
126 $this->image=$canvas;
127 }他{
128 $this->画像->サムネイル画像($幅,$高さ,true);
129 }
130 休憩;
131 case 'scale_fill':
132 $size=$this->image->getImagePage();
133 $src_width=$size['width'];
134 $src_height=$size['高さ'];
135
136 $x=0;
137 $y=0;
138
139 $dst_width=$width;
140 $dst_height=$height;
141
142 if($src_width*$height > $src_height*$width){
143 $dst_height=intval($width*$src_height/$src_width);
144 $y=intval(($height-$dst_height)/2);
145 }他{
146 $dst_width=intval($height*$src_width/$src_height);
147 $x=intval(($width-$dst_width)/2);
148 }
149
150 $image=$this->image;
151 $canvas=new Imagick();
152
153 $color='rgba('.$fill_color[0].','.$fill_color[1].','.$fill_color[2].','. $fill_color[3].')';
154 if($this->type=='gif'){
155 $images=$image->coalesceImages();
156 foreach($images as $frame){
157 $frame->サムネイル画像($幅,$高さ,true);
158
159 $draw=new ImagickDraw();
160$ draw-> composite($frame-> getimagecompose()、$x、$y、$dst_width、$dst_height、$frame)) ;
161
162 $img=new Imagick();
163 $img->newImage($width,$height,$color,'gif');
164 $img->drawImage($draw);
165
166 $canvas->addImage($img);
167 $canvas->setImageDelay($img->getImageDelay());
168 $canvas->setImagePage($width,$height,0,0);
169 }
170 }他{
171 $image->thumbnailImage($width,$height,true);
172
173 $draw=new ImagickDraw();
174$ draw-> composite($image-> getimageCompose()、$x、$y、$dst_width、$dst_height、$ymage)) ;
175
176 $canvas->newImage($width,$height,$color,$this->get_type());
177 $canvas->drawImage($draw);
178 $canvas->setImagePage($width,$height,0,0);
179 }
180 $image->destroy();
181 $this->image=$canvas;
182 休憩;
183 デフォルト:
184 $size=$this->image->getImagePage();
185 $src_width=$size['width'];
186 $src_height=$size['高さ'];
187
188 $crop_x=0;
189 $crop_y=0;
190
191 $crop_w=$src_width;
192 $crop_h=$src_height;
193
194 if($src_width*$height > $src_height*$width){
195 $crop_w=intval($src_height*$width/$height);
196 }他{
197 $crop_h=intval($src_width*$height/$width);
198 }199
200 スイッチ($fit){
201 ケース 'north_west':
202 $crop_x=0;
203 $crop_y=0;
204 休憩;
205 ケース「北」:
206 $crop_x=intval(($src_width-$crop_w)/2);
207 $crop_y=0;
208 休憩;
209 ケース '北東':
210 $crop_x=$src_width-$crop_w;
211 $crop_y=0;
212 休憩;
213 ケース '西':
214 $crop_x=0;
215 $crop_y=intval(($src_height-$crop_h)/2);
216 休憩;
217 ケース 'センター':
218 $crop_x=intval(($src_width-$crop_w)/2);
219 $crop_y=intval(($src_height-$crop_h)/2);
220 休憩;
221 ケース '東':
222 $crop_x=$src_width-$crop_w;
223 $crop_y=intval(($src_height-$crop_h)/2);
224 休憩;
225 ケース 'south_west':
226 $crop_x=0;
227 $crop_y=$src_height-$crop_h;
228 休憩;
229 ケース '南':
230 $crop_x=intval(($src_width-$crop_w)/2);
231 $crop_y=$src_height-$crop_h;
232 休憩;
233 ケース '南東':
234 $crop_x=$src_width-$crop_w;
235 $crop_y=$src_height-$crop_h;
236 休憩;
237 デフォルト:
238 $crop_x=intval(($src_width-$crop_w)/2);
239 $crop_y=intval(($src_height-$crop_h)/2);
240 }241
242 $image=$this->image;
243 $canvas=new Imagick();
244
245 if($this->type=='gif'){
246 $images=$image->coalesceImages();
247 foreach($images as $frame){
248 $img=new Imagick();
249 $img->readImageBlob($frame);
250 $img->cropImage($crop_w,$crop_h,$crop_x,$crop_y);
251 $img->サムネイル画像($幅,$高さ,true);
252
253 $canvas->addImage($img);
254 $canvas->setImageDelay($img->getImageDelay());
255 $canvas->setImagePage($width,$height,0,0);
256 }
257 }他{
258 $image->cropImage($crop_w,$crop_h,$crop_x,$crop_y);
259 $image->サムネイル画像($幅,$高さ,true);
260 $canvas->addImage($image);
261 $canvas->setImagePage($width,$height,0,0);
262 }
263 $image->destroy();
264 $this->image=$canvas;
265 }
266 }
267
268 /**
269 追加圖片水印
270 參數:
271 $path:水印圖片(完整路徑を含む)
272 $x,$y:水印公認
273 /**/
274 public function add_watermark($path,$x=0,$y=0){
275 $watermark=new Imagick($path);
276 $draw=new ImagickDraw();
277 $draw->composite($watermark->getImageCompose(),$x,$y,$watermark->getImageWidth(),$watermark- >getimageheight(),$ウォーターマーク);
278
279 if($this->type=='gif'){
280 $image=$this->image;
281 $canvas=new Imagick();
282 $images=$image->coalesceImages();
283 foreach($image as $frame){
284 $img=new Imagick();
285 $img->readImageBlob($frame);
286 $img->drawImage($draw);
287
288 $canvas->addImage($img);
289 $canvas->setImageDelay($img->getImageDelay());
290 }
291 $image->destroy();
292 $this->image=$canvas;
293 }他{
294 $this->画像->drawImage($draw);
295 }296 }
297
298 /**
299 テキストの透かしを追加
300 パラメータ:
301 $text: 透かしテキスト
302 $x,$y: 透かし座標
303 /**/
304 public function add_text($text,$x=0,$y=0,$angle=0,$style=array()){
305 $draw=new ImagickDraw();
306 if(isset($style['font'])) $draw->setFont($style['font']);
307 if(isset($style['font_size'])) $draw->setFontSize($style['font_size']);
308 if(isset($style['fill_color'])) $draw->setFillColor($style['fill_color']);
309 if(isset($style['under_color'])) $draw->setTextUnderColor($style['under_color']);
310
311 if($this->type=='gif'){
312 foreach($this->画像as $frame){
313 $frame->annotateImage($draw,$x,$y,$angle,$text);
314 }
315 }他{
316 $this->image->annotateImage($draw,$x,$y,$angle,$text);
317 }
318 }
319
320 /**
321 画像アーカイブ
322 パラメータ:
323 $path: アーカイブの場所と新しいファイル名
324 /**/
325 public function save_to($path){
326 $this->画像->stripImage();
327 スイッチ($this->type){
328 ケース 'gif':
329 $this->image->writeImages($path,true);
330 戻る ;
331 ケース 'jpg':
332 ケース 'jpeg':
333 $this->image->setImageCompressionQuality($_ENV['ImgQ']);
334 $this->画像->writeImage($path);
335 戻る ;
336 ケース 'png':
337 $flag = $this->image->getImageAlphaChannel();
338
339 // PNG 背景が不透明な場合は圧縮します
340 if(imagick::ALPHACHANNEL_UNDEFINED == $flag または imagick::ALPHACHANNEL_DEACTIVATE == $flag){
341 $this->image->setImageType(imagick::IMGTYPE_PALETTE);
342 $this->画像->writeImage($path);
343 }他{
344 $this->画像->writeImage($path);
345 }設定解除($flag);
346 戻る ;
347 デフォルト:
348 $this->画像->writeImage($path);
349 戻る ;
350 }
351 }352
353 // 画像を画面に直接出力します
354 public function Output($header=true){
355 if($header) header('Content-type: '.$this->type);
356 echo $this->image->getImagesBlob();
357 }
358
359 /**
360 サムネイルを作成する
361 $fitがtrueの場合、比率は維持され、$width X $height以内に縮小画像が生成されます
362 /**/
363 public functionサムネイル($幅=100,$高さ=100,$fit=true){$this->image->thumbnailImage( $幅,$高さ,$フィット);}
364
365 /**
366 画像に枠線を追加する
367 $width: 左右の境界線の幅
368 $height: 上下の境界線の幅
369 $color: カラー
370 /**/
371 public function border($width,$height,$color='rgb(220,220,220)'){
372 $color=new ImagickPixel();
373 $color->setColor($color);
374 $this->image->borderImage($color,$width,$height);
375 }
376
377 //画像の幅を取得する
378 public function get_width(){$size=$this->image->getImagePage();return $size['width'];}
379
380 //画像の高さを取得します
381 public function get_height(){$size=$this->image->getImagePage();return $size['height'];}
382
383 // 画像タイプを設定する
384 public function set_type($type='png'){$this->type=$type;$this->image->setImageFormat($タイプ);}
385
386 // 画像タイプを取得する
387 public function get_type(){return $this->type;}
388
389 public function Blur($radius,$sigma){$this->image->blurImage($radius,$sigma);} // ぼやけてます
390 public function gaussian_blur($radius,$sigma){$this->image->gaussianBlurImage($radius,$sigma) ;} // ガウスぼかし
391 public function_blur($radius,$sigma,$angle){$this->image->motionBlurImage($radius,$sigma 、 $角度);} // モーション ブラー
392 public functionradial_blur($radius){$this->image->radialBlurImage($radius);} // 放射状ぼかし
393 public function add_noise($type=null){$this->image->addNoiseImage($type==null?imagick::NOISE_IMPULSE : $type);} // ノイズを追加します
394 public function level($black_point,$gamma,$white_point){$this->image->levelImage($black_point,$gamma) 、 $white_point);} // 調整色階
395 public function modulate($brightness,$saturation,$hue){$this->image->modulateImage($brightness,$saturation,$hue);} // 調整亮度,飽和度,色調
396 public function charcoal($radius,$sigma){$this->image->charcoalImage($radius,$sigma);} // 素描效果
397 public function oil_paint($radius){$this->image->oilPaintImage($radius);} // 油畫效果
398 public function flop(){$this->image->flopImage();} // 水平翻轉
399 public function flip(){$this->image->flipImage();} // 垂直翻轉
400 }
View Code
Version: ImageMagick 6.7.1-2 2014-05-29 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features:
Version: ImageMagick 6.7.1-2 2014-05-29 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features: openMP

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPにより、インタラクティブなWebコンテンツを簡単に作成できます。 1)HTMLを埋め込んでコンテンツを動的に生成し、ユーザー入力またはデータベースデータに基づいてリアルタイムで表示します。 2)プロセスフォームの提出と動的出力を生成して、XSSを防ぐためにHTMLSPECIALCHARSを使用していることを確認します。 3)MySQLを使用してユーザー登録システムを作成し、Password_HashおよびPreprocessingステートメントを使用してセキュリティを強化します。これらの手法を習得すると、Web開発の効率が向上します。

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

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