クラスlib_image_imagick
{
プライベート $image = null;
private $type = null;
// 构造関数数
パブリック関数 __construct(){}
// 分析构関数数
パブリック関数 __destruct()
{
if($this->image!==null) $this->image->destroy();
}
// 画像をダウンロード
パブリック関数オープン($path)
{
$this->image = 新しい Imagick( $path );
if($this->image)
{
$this->type = strto lower($this->image->getImageFormat());
}
$this->image; を返す
}
パブリック関数 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
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 と正確には等しくありません
'scale_fill': セーフティ ボックス内で画像を比例的に拡大縮小します $width , 透明度) 透明度 (0 不透明-127 完全透明))
その他: スマート モードでは、画像を拡大縮小し、画像の $width X $height ピクセル サイズの中央部分を読み込むことができます
$fit = 'force','scale','scale_fill'の場合: 完全な画像を出力します
$fit = 画像の向きの値の場合、指定された位置に画像の一部を出力します
文字と画像の対応関係は以下の通りです
北西北北東
西中東
南西南南東
*/
パブリック関数size_to($width = 100, $height = 100, $fit = 'center', $fill_color = array(255,255,255,0) )
{
スイッチ($fit)
{
ケース「力」:
If($this->type=='gif')
{
$image = $this->image;
$canvas = new 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['height'];
$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 を $frame)
{
$frame->thumbnailImage( $width, $height, true );
$draw = new ImagickDraw();
$draw->composite($frame->getImageCompose(), $x, $y, $dst_width, $dst_height, $frame);
$img = new 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 = new 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)
{
ケース「北西」:
$crop_x = 0;
$crop_y = 0;
休憩;
ケース「北」:
$crop_x = intval( ($src_width-$crop_w)/2 );
$crop_y = 0;
休憩; ケース「北東」:
$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 );
休憩;
ケース「南西」:
$crop_x = 0;
$crop_y = $src_height-$crop_h;
休憩;
ケース「南」:
$crop_x = intval( ($src_width-$crop_w)/2 );
$crop_y = $src_height-$crop_h;
休憩;
ケース「南東」:
$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 = new 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 を $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 = new 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()
{
return $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' または颜色单词 'white'/'red'...
*/
public function 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();} // 垂直反転
}
|