画像の切り取り、回転、シャープ化、減色、特殊効果の追加を実現する php_imagick メソッド、_PHP チュートリアル
php_imagick は、画像の切り取り、回転、シャープ化、減色、または特殊効果の追加を実現するメソッドです。
この記事の例では、php_imagick が画像の切り取り、回転、シャープ化、減色、または特殊効果の追加をどのように実現できるかを説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:
PHP で ImageMagick 関数を呼び出せるようにする PHP 拡張機能。この拡張機能を使用すると、PHP に ImageMagick と同じ機能を持たせることができます。
ImageMagick は、強力で安定した無料のツールセットおよび開発パッケージであり、一般的な TIFF、JPEG、GIF、PNG、PDF、PhotoCD などの形式を含む 185 を超える基本形式の画像ファイルの読み取り、書き込み、処理に使用できます。 ImageMagick を使用すると、Web アプリケーションのニーズに応じて画像を動的に生成したり、画像 (または画像のグループ) にサイズの変更、回転、鮮明化、減色、特殊効果の追加を行うこともできます。同じ形式で保存することも、別の形式で保存することもできます。
php_imagick は、PHP 画像処理用の拡張パッケージで、サイズの変更、回転、シャープ化、色の減算、画像への特殊効果の追加などの操作を実行できます。
1. Imagick 拡張機能を Windows にインストールします:
1. ImageMagickをダウンロードしてインストールします
http://image_magick.veidrodis.com/image_magick/binaries/ImageMagick-6.6.2-10-Q16-windows-dll.exe
2. php_imagick.dllをダウンロードします
http://valokuva.org/outside-blog-content/imagick-windows-builds/php53/imagick-2.3.0-dev/vc9_nts/php_imagick.dll
スレッドセーフなphpを使用している場合は、ダウンロードしてください
http://valokuva.org/outside-blog-content/imagick-windows-builds/php53/imagick-2.3.0-dev/vc9_zts/php_imagick.dll
3.設定
php.iniを追加
extension=php_imagick.dll、Webサーバーを再起動します
2. Linux に Imagick 拡張機能をインストールします:
1.yum ImageMagickをインストールします
ImageMagick ImageMagick-devel をインストールします
2. インストールが成功したかどうかをテストします
バージョン変換
3. imagick 拡張機能をインストールします
01.wget http://pecl.php.net/get/imagick-3.1.0RC2.tgz02.tar xzvf imagick-3.1.0RC2.tgz03.cd imagick-3.1.0RC204.phpize05../configure06.make07.make install
4. php.ini ファイルを編集し、ファイルの最後に次のコードを追加します
拡張子=imagick.so
5.Apacheサーバーを再起動します
サービスhttpdの再起動
3. ケース
1.枠線処理
まずは簡単な例を見てみましょう
php_imagickプログラム例
コードをコピーします
コードは次のとおりです:
コードをコピーします
$images = 新しい Imagick(glob('images/*.JPG')); foreach($images as $image) { // 0 を指定すると、thumbnailImage がアスペクト比を維持するように強制されます
コードをコピーします
コードは次のとおりです:
/* 新しい imagick オブジェクトを作成し、GIF で読み込みます */
$im = 新しい Imagick("example.gif"); /* すべてのフレームのサイズを変更します */ foreach ($im を $frame として) {
/* 50x50 フレーム */ $frame->サムネイル画像(50, 50); /* 仮想キャンバスを正しいサイズに設定します */
サムネイルのトリミング/生成/透かしの追加、GIF の自動検出と処理
呼び出し方法:
コードをコピーします
コードは次のとおりです:
$image = 新しい lib_image_imagick();
$image->open('a.gif');
$image->resize_to(100, 100, 'scale_fill');
$image->add_text('1024i.com', 10, 20);
$image->add_watermark('1024i.gif', 10, 50);
$image->save_to('x.gif');
imagick.class.php
クラス lib_image_imagick
{
プライベート $image = null;
プライベート $type = null;
// 构造関数数
パブリック関数 __construct(){}
// 分析构関数数
パブリック関数 __destruct()
{
if($this->image!==null) $this->image->destroy();
}
// 画像をダウンロード
パブリック関数 open($path)
{
$this->image = new Imagick( $path );
if($this->image)
{
$this->type = strto lower($this->image->getImageFormat());
}
$this->画像を返します;
}
パブリック関数 Crop($x=0, $y=0, $width=null, $height=null)
{
if($width==null) $width = $this->image->getImageWidth()-$x;
if($height==null) $height = $this->image->getImageHeight()-$y;
if($width<=0 || $height<=0) return;
if($this->type=='gif')
{
$image = $this->image;
$canvas = 新しい Imagick();
$images = $image->coalesceImages();
foreach($images as $frame){
$img = 新しい Imagick();
$img->readImageBlob($frame);
$img->cropImage($width, $height, $x, $y);
$canvas->addImage( $img );
$canvas->setImageDelay( $img->getImageDelay() );
$canvas->setImagePage($width, $height, 0, 0);
}
$image->destroy();
$this->image = $canvas;
}
それ以外は
{
$this->image->cropImage($width, $height, $x, $y);
}
}
/*
* 画像サイズを変更
$fit: 适应大小方式
'force': 图片强制变形成 $width X $height 大小
'scale': 按比在安全框 $width X $height 内放图片、出放後图像大小不完全等的 $width X $height
'scale_fill': 安全框 $width X $height 内放圃图片、安全框内に像素のない場所の充填色、このパラメータを使用すると設定可能な背景充填色 $bg_color = array(255,255,255)(红,绿,蓝、透明度) 透明度(0不透明-127完全透明))
その他: 智能モ能 放图画像并ダウンロード取图画像中部分 $width X $height 像素大小
$fit = 'force','scale','scale_fill' 時: 输出完整画像
$fit = 画像方位值時, 出指定位置部分画像
文字と画像の対応関係は次のとおりです:
北西 北 北東
西 中央 東
南西 南 南東
*/
public function raise_to($width = 100, $height = 100, $fit = 'center', $fill_color = array(255,255,255,0) )
{
スイッチ($fit)
{
ケース「力」:
if($this->type=='gif')
{
$image = $this->image;
$canvas = 新しい Imagick();
$images = $image->coalesceImages();
foreach($images as $frame){
$img = 新しい Imagick();
$img->readImageBlob($frame);
$img->thumbnailImage( $width, $height, false );
$canvas->addImage( $img );
$canvas->setImageDelay( $img->getImageDelay() );
}
$image->destroy();
$this->image = $canvas;
}
それ以外は
{
$this->image->thumbnailImage( $width, $height, false );
}
壊す;
ケース「スケール」:
if($this->type=='gif')
{
$image = $this->image;
$images = $image->coalesceImages();
$canvas = 新しい Imagick();
foreach($images as $frame){
$img = 新しい Imagick();
$img->readImageBlob($frame);
$img->thumbnailImage( $width, $height, true );
$canvas->addImage( $img );
$canvas->setImageDelay( $img->getImageDelay() );
}
$image->destroy();
$this->image = $canvas;
}
それ以外は
{
$this->image->thumbnailImage( $width, $height, true );
}
壊す;
ケース「scale_fill」:
$size = $this->image->getImagePage();
$src_width = $size['width'];
$src_height = $size['高さ'];
$x = 0;
$y = 0;
$dst_width = $width;
$dst_height = $height;
if($src_width*$height > $src_height*$width)
{
$dst_height = intval($width*$src_height/$src_width);
$y = intval( ($height-$dst_height)/2 );
}
それ以外は
{
$dst_width = intval($height*$src_width/$src_height);
$x = intval( ($width-$dst_width)/2 );
}
$image = $this->image;
$canvas = 新しい Imagick();
$color = 'rgba('.$fill_color[0].','.$fill_color[1].','.$fill_color[2].','.$fill_color[3].')';
if($this->type=='gif')
{
$images = $image->coalesceImages();
foreach($images as $frame)
{
$frame->thumbnailImage( $width, $height, true );
$draw = 新しい ImagickDraw();
$draw->composite($frame->getImageCompose(), $x, $y, $dst_width, $dst_height, $frame);
$img = 新しい Imagick();
$img->newImage($width, $height, $color, 'gif');
$img->drawImage($draw);
$canvas->addImage( $img );
$canvas->setImageDelay( $img->getImageDelay() );
$canvas->setImagePage($width, $height, 0, 0);
}
}
それ以外は
{
$image->thumbnailImage( $width, $height, true );
$draw = 新しい ImagickDraw();
$draw->composite($image->getImageCompose(), $x, $y, $dst_width, $dst_height, $image);
$canvas->newImage($width, $height, $color, $this->get_type() );
$canvas->drawImage($draw);
$canvas->setImagePage($width, $height, 0, 0);
}
$image->destroy();
$this->image = $canvas;
壊す;
デフォルト:
$size = $this->image->getImagePage();
$src_width = $size['width'];
$src_height = $size['高さ'];
$crop_x = 0;
$crop_y = 0;
$crop_w = $src_width;
$crop_h = $src_height;
if($src_width*$height > $src_height*$width)
{
$crop_w = intval($src_height*$width/$height);
}
それ以外は
{
$crop_h = intval($src_width*$height/$width);
}
スイッチ($fit)
{
ケース「north_west」:
$crop_x = 0;
$crop_y = 0;
壊す;
「北」の場合:
$crop_x = intval( ($src_width-$crop_w)/2 );
$crop_y = 0;
壊す;
ケース「north_east」:
$crop_x = $src_width-$crop_w;
$crop_y = 0;
壊す;
ケース「西」:
$crop_x = 0;
$crop_y = intval( ($src_height-$crop_h)/2 );
壊す;
ケース「センター」:
$crop_x = intval( ($src_width-$crop_w)/2 );
$crop_y = intval( ($src_height-$crop_h)/2 );
壊す;
ケース「東」:
$crop_x = $src_width-$crop_w;
$crop_y = intval( ($src_height-$crop_h)/2 );
壊す;
ケース「south_west」:
$crop_x = 0;
$crop_y = $src_height-$crop_h;
壊す;
ケース「南」:
$crop_x = intval( ($src_width-$crop_w)/2 );
$crop_y = $src_height-$crop_h;
壊す;
ケース「south_east」:
$crop_x = $src_width-$crop_w;
$crop_y = $src_height-$crop_h;
壊す;
デフォルト:
$crop_x = intval( ($src_width-$crop_w)/2 );
$crop_y = intval( ($src_height-$crop_h)/2 );
}
$image = $this->image;
$canvas = 新しい Imagick();
if($this->type=='gif')
{
$images = $image->coalesceImages();
foreach($images as $frame){
$img = 新しい Imagick();
$img->readImageBlob($frame);
$img->cropImage($crop_w, $crop_h, $crop_x, $crop_y);
$img->thumbnailImage( $width, $height, true );
$canvas->addImage( $img );
$canvas->setImageDelay( $img->getImageDelay() );
$canvas->setImagePage($width, $height, 0, 0);
}
}
それ以外は
{
$image->cropImage($crop_w, $crop_h, $crop_x, $crop_y);
$image->thumbnailImage( $width, $height, true );
$canvas->addImage( $image );
$canvas->setImagePage($width, $height, 0, 0);
}
$image->destroy();
$this->image = $canvas;
}
}
// 追加水印图片
パブリック関数 add_watermark($path, $x = 0, $y = 0)
{
$watermark = 新しい Imagick($path);
$draw = 新しい ImagickDraw();
$draw->composite($watermark->getImageCompose(), $x, $y, $watermark->getImageWidth(), $watermark->getimageheight(), $watermark);
if($this->type=='gif')
{
$image = $this->image;
$canvas = 新しい Imagick();
$images = $image->coalesceImages();
foreach($image as $frame)
{
$img = 新しい Imagick();
$img->readImageBlob($frame);
$img->drawImage($draw);
$canvas->addImage( $img );
$canvas->setImageDelay( $img->getImageDelay() );
}
$image->destroy();
$this->image = $canvas;
}
それ以外は
{
$this->image->drawImage($draw);
}
}
// 追加水印文字
パブリック関数 add_text($text, $x = 0 , $y = 0, $angle=0, $style=array())
{
$draw = 新しい ImagickDraw();
if(isset($style['font'])) $draw->setFont($style['font']);
if(isset($style['font_size'])) $draw->setFontSize($style['font_size']);
if(isset($style['fill_color'])) $draw->setFillColor($style['fill_color']);
if(isset($style['under_color'])) $draw->setTextUnderColor($style['under_color']);
if($this->type=='gif')
{
foreach($this->image as $frame)
{
$frame->annotateImage($draw, $x, $y, $angle, $text);
}
}
それ以外は
{
$this->image->annotateImage($draw, $x, $y, $angle, $text);
}
}
// 保存まで指定経路
パブリック関数 save_to( $path )
{
if($this->type=='gif')
{
$this->image->writeImages($path, true);
}
それ以外は
{
$this->image->writeImage($path);
}
}
// 出射画像
パブリック関数出力($header = true)
{
if($header) header('Content-type: '.$this->type);
echo $this->image->getImagesBlob();
}
パブリック関数 get_width()
{
$size = $this->image->getImagePage();
$size['width'] を返します;
}
パブリック関数 get_height()
{
$size = $this->image->getImagePage();
$size['高さ'] を返します。
}
// 設置画像の種類、默认とソースの種類が一致
パブリック関数 set_type( $type='png' )
{
$this->type = $type;
$this->image->setImageFormat( $type );
}
// 获取源画像类型
パブリック関数 get_type()
{
$this->typeを返します;
}
//現在のオブジェクトが写真であるかどうか
パブリック関数 is_image()
{
if( $this->image )
true を返します。
それ以外は
false を返します。
}
public function sumnail($width = 100, $height = 100, $fit = true){ $this->image->thumbnailImage( $width, $height, $fit );} // 缩略図の生成 $fit真時間は比率を維持して安全框 $width X $height 内で生成缩略画像
/*
追加一边框
$width: 左右边框宽度
$height: 上下边框宽度
$color: カラー: RGB カラー 'rgb(255,0,0)' または 16 進数のカラー '#FF0000' またはカラーワード '白'/'赤'...
*/
パブリック関数 border($width, $height, $color='rgb(220, 220, 220)')
{
$color=new ImagickPixel();
$color->setColor($color);
$this->image->borderImage($color, $width, $height);
}
public function Blur($radius, $sigma){$this->image->blurImage($radius, $sigma);} // ぼかし
public function gaussian_blur($radius, $sigma){$this->image->gaussianBlurImage($radius, $sigma);} // ガウスぼかし
public function motion_blur($radius, $sigma, $angle){$this->image->motionBlurImage($radius, $sigma, $angle);} // モーション ブラー
public function radio_blur($radius){$this->image->radialBlurImage($radius);} // 放射状のブラー
public function add_noise($type=null){$this->image->addNoiseImage($type==null?imagick::NOISE_IMPULSE:$type);} // ノイズを追加します
public function level($black_point, $gamma, $white_point){$this->image->levelImage($black_point, $gamma, $white_point);} // カラーレベルを調整します
public function modulate($brightness, $saturation, $hue){$this->image->modulateImage($brightness, $saturation, $hue);} // 明るさ、彩度、色相を調整します
public function Charcoal($radius, $sigma){$this->image->charcoalImage($radius, $sigma);} // スケッチ
public functionoil_paint($radius){$this->image->oilPaintImage($radius);} // 油絵効果
public function flop(){$this->image->flopImage();} // 水平方向に反転します
public function flick(){$this->image->flipImage();} // 垂直方向の反転
}
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。

ホット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 にアップグレードする方法について説明します。

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

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
