国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 開發(fā) > PHP > 正文

PHP 使用 Imagick 裁切/生成縮略圖/添加水印自動(dòng)檢測(cè)和處理 GIF

2024-05-04 23:43:11
字體:
供稿:網(wǎng)友
這篇文章主要介紹了PHP 使用 Imagick 裁切/生成縮略圖/添加水印自動(dòng)檢測(cè)和處理 GIF的相關(guān)資料,需要的朋友可以參考下
 

給骨頭系統(tǒng)開發(fā)的圖像庫的 imagick 部分 ,支持 gif , 完美支持裁切、生成縮略圖、添加水印 。

支持按方位生成縮略圖像, 如:

// 把左上角優(yōu)先$image->resize_to(100, 100, 'north_west');// 右邊優(yōu)先$image->resize_to(100, 100, 'east');...

更多參數(shù)看源代碼

原圖

PHP 使用 Imagick 裁切/生成縮略圖/添加水印自動(dòng)檢測(cè)和處理 GIF

效果圖:

PHP 使用 Imagick 裁切/生成縮略圖/添加水印自動(dòng)檢測(cè)和處理 GIFPHP 使用 Imagick 裁切/生成縮略圖/添加水印自動(dòng)檢測(cè)和處理 GIF PHP 使用 Imagick 裁切/生成縮略圖/添加水印自動(dòng)檢測(cè)和處理 GIF

調(diào)用方式:

include 'imagick.class.php'; $image = new 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

<?php /* @版本日期: 版本日期: 2012年1月18日 @著作權(quán)所有: 1024 intelligence ( http://www.1024i.com ) 獲得使用本類庫的許可, 您必須保留著作權(quán)聲明信息. 報(bào)告漏洞,意見或建議, 請(qǐng)聯(lián)系 Lou Barnes(iua1024@gmail.com) */ class lib_image_imagick { private $image = null; private $type = null; // 構(gòu)造函數(shù) public function __construct(){} // 析構(gòu)函數(shù) public function __destruct() { if($this->image!==null) $this->image->destroy(); } // 載入圖像 public function open($path) { $this->image = new Imagick( $path ); if($this->image) { $this->type = strtolower($this->image->getImageFormat()); } return $this->image; } public function 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 = new Imagick(); $images = $image->coalesceImages(); foreach($images as $frame){ $img = new 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; } else { $this->image->cropImage($width, $height, $x, $y); } } /* * 更改圖像大小 $fit: 適應(yīng)大小方式 'force': 把圖片強(qiáng)制變形成 $width X $height 大小 'scale': 按比例在安全框 $width X $height 內(nèi)縮放圖片, 輸出縮放后圖像大小 不完全等于 $width X $height 'scale_fill': 按比例在安全框 $width X $height 內(nèi)縮放圖片,安全框內(nèi)沒有像素的地方填充色, 使用此參數(shù)時(shí)可設(shè)置背景填充色 $bg_color = array(255,255,255)(紅,綠,藍(lán), 透明度) 透明度(0不透明-127完全透明)) 其它: 智能模能 縮放圖像并載取圖像的中間部分 $width X $height 像素大小 $fit = 'force','scale','scale_fill' 時(shí): 輸出完整圖像 $fit = 圖像方位值 時(shí), 輸出指定位置部分圖像 字母與圖像的對(duì)應(yīng)關(guān)系如下: north_west north north_east west center east south_west south south_east */ public function resize_to($width = 100, $height = 100, $fit = 'center', $fill_color = array(255,255,255,0) ) { switch($fit) { case 'force': if($this->type=='gif') { $image = $this->image; $canvas = new Imagick(); $images = $image->coalesceImages(); foreach($images as $frame){ $img = new Imagick(); $img->readImageBlob($frame); $img->thumbnailImage( $width, $height, false ); $canvas->addImage( $img ); $canvas->setImageDelay( $img->getImageDelay() ); } $image->destroy(); $this->image = $canvas; } else { $this->image->thumbnailImage( $width, $height, false ); } break; case 'scale': if($this->type=='gif') { $image = $this->image; $images = $image->coalesceImages(); $canvas = new Imagick(); foreach($images as $frame){ $img = new Imagick(); $img->readImageBlob($frame); $img->thumbnailImage( $width, $height, true ); $canvas->addImage( $img ); $canvas->setImageDelay( $img->getImageDelay() ); } $image->destroy(); $this->image = $canvas; } else { $this->image->thumbnailImage( $width, $height, true ); } break; case '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 ); } else { $dst_width = intval($height*$src_width/$src_height); $x = intval( ($width-$dst_width)/2 ); } $image = $this->image; $canvas = new 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 = 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); } } else { $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; break; default: $size = $this->image->getImagePage(); $src_width = $size['width']; $src_height = $size['height']; $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); } else { $crop_h = intval($src_width*$height/$width); } switch($fit) { case 'north_west': $crop_x = 0; $crop_y = 0; break; case 'north': $crop_x = intval( ($src_width-$crop_w)/2 ); $crop_y = 0; break; case 'north_east': $crop_x = $src_width-$crop_w; $crop_y = 0; break; case 'west': $crop_x = 0; $crop_y = intval( ($src_height-$crop_h)/2 ); break; case 'center': $crop_x = intval( ($src_width-$crop_w)/2 ); $crop_y = intval( ($src_height-$crop_h)/2 ); break; case 'east': $crop_x = $src_width-$crop_w; $crop_y = intval( ($src_height-$crop_h)/2 ); break; case 'south_west': $crop_x = 0; $crop_y = $src_height-$crop_h; break; case 'south': $crop_x = intval( ($src_width-$crop_w)/2 ); $crop_y = $src_height-$crop_h; break; case 'south_east': $crop_x = $src_width-$crop_w; $crop_y = $src_height-$crop_h; break; default: $crop_x = intval( ($src_width-$crop_w)/2 ); $crop_y = intval( ($src_height-$crop_h)/2 ); } $image = $this->image; $canvas = new Imagick(); if($this->type=='gif') { $images = $image->coalesceImages(); foreach($images as $frame){ $img = new 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); } } else { $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; } } // 添加水印圖片 public function add_watermark($path, $x = 0, $y = 0) { $watermark = new Imagick($path); $draw = new ImagickDraw(); $draw->composite($watermark->getImageCompose(), $x, $y, $watermark->getImageWidth(), $watermark->getimageheight(), $watermark); if($this->type=='gif') { $image = $this->image; $canvas = new Imagick(); $images = $image->coalesceImages(); foreach($image as $frame) { $img = new Imagick(); $img->readImageBlob($frame); $img->drawImage($draw); $canvas->addImage( $img ); $canvas->setImageDelay( $img->getImageDelay() ); } $image->destroy(); $this->image = $canvas; } else { $this->image->drawImage($draw); } } // 添加水印文字 public function 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); } } else { $this->image->annotateImage($draw, $x, $y, $angle, $text); } } // 保存到指定路徑 public function save_to( $path ) { if($this->type=='gif') { $this->image->writeImages($path, true); } else { $this->image->writeImage($path); } } // 輸出圖像 public function output($header = true) { if($header) header('Content-type: '.$this->type); echo $this->image->getImagesBlob(); } public function get_width() { $size = $this->image->getImagePage(); return $size['width']; } public function get_height() { $size = $this->image->getImagePage(); return $size['height']; } // 設(shè)置圖像類型, 默認(rèn)與源類型一致 public function set_type( $type='png' ) { $this->type = $type; $this->image->setImageFormat( $type ); } // 獲取源圖像類型 public function get_type() { return $this->type; } // 當(dāng)前對(duì)象是否為圖片 public function is_image() { if( $this->image ) return true; else return false; } public function thumbnail($width = 100, $height = 100, $fit = true){ $this->image->thumbnailImage( $width, $height, $fit );} // 生成縮略圖 $fit為真時(shí)將保持比例并在安全框 $width X $height 內(nèi)生成縮略圖片 /* 添加一個(gè)邊框 $width: 左右邊框?qū)挾?$height: 上下邊框?qū)挾?$color: 顏色: RGB 顏色 'rgb(255,0,0)' 或 16進(jìn)制顏色 '#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);} // 運(yùn)動(dòng)模糊 public function radial_blur($radius){$this->image->radialBlurImage($radius);} // 徑向模糊 public function add_noise($type=null){$this->image->addNoiseImage($type==null?imagick::NOISE_IMPULSE:$type);} // 添加噪點(diǎn) public function level($black_point, $gamma, $white_point){$this->image->levelImage($black_point, $gamma, $white_point);} // 調(diào)整色階 public function modulate($brightness, $saturation, $hue){$this->image->modulateImage($brightness, $saturation, $hue);} // 調(diào)整亮度、飽和度、色調(diào) public function charcoal($radius, $sigma){$this->image->charcoalImage($radius, $sigma);} // 素描 public function oil_paint($radius){$this->image->oilPaintImage($radius);} // 油畫效果 public function flop(){$this->image->flopImage();} // 水平翻轉(zhuǎn) public function flip(){$this->image->flipImage();} // 垂直翻轉(zhuǎn) }


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到PHP教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
在线黄色.com| 免费在线播放av| 日本中文字幕高清视频| 免费精品国产自产拍观看| 操操操综合网| 天堂在线亚洲| 中文岛国精品亚洲一区| 青青青手机在线视频观看| 国产中文字幕在线视频| 国产高清视频在线| 亚洲一本大道| 国产免费网址| 亚洲永久免费网站| 国产午夜视频| 久久一本精品| 国产三区视频在线观看| av中文资源在线| 中文字幕在线视频观看| 在线看黄网站| 国产黄色片中文字幕| 九九视频精品在线| 精品免费视频一卡2卡三卡4卡不卡| 人日人天天爽| 国产二区视频在线观看| 久久亚洲国产成人亚| 国产粉嫩一区二区三区在线观看| 久久五月精品中文字幕| 永久免费av网站| 国产成免费视频| 国产九九九九| jlzzjlzz欧美大全| 国产不卡一卡2卡三卡4卡5卡在线| 久草网在线视频| av在线不卡免费| 亚洲电影视频在线| 91美女在线| 国产对白在线| 国产精品视频福利一区二区| 国产中文字幕在线观看| www.蜜桃av| gogo在线观看| 日本h视频在线观看| 天天操中文字幕视频| 亚洲成人国产综合| 精品国产免费观看一区| 国产卡二和卡三的视频| 日韩av成人| 国产黄在线播放| 2018狠狠干| 99热国产在线| 先锋av资源网| 麻豆精品永久免费视频| 高清av中文在线字幕观看1| 狠狠干五月天| 日本中文字幕高清视频| 国产一级黄色| 99热免费观看| 免费一区二区在线观看| 国产美女福利在线观看| 国产欧美在线观看视频| √天堂资源中文www| 在线观看电影av| 超碰国产在线| 国产三级自拍| 日本片在线看| 国产麻豆精品高清在线播放| 国产黄色免费网| h网址在线观看| 黄色一级片视频| 精品国语对白精品自拍视| 在线观看免费高清完整| 另类综合图区| 91国内在线| 国产在线资源| 在线视频婷婷| 国产精品一区二区资源| 在线视频观看国产| 国产精品一区二三区| 在线播放一区二区精品产| 国产在线视频网站| 亚洲大香人伊一本线| 国产一二三区在线| 久久91精品视频| 在线观看视频污| 国产小视频免费在线网址| 欧美日韩**字幕一区| 中文在线观看视频| 国产小视频免费在线网址| а√资源新版在线天堂| 2021天堂中文幕一二区在线观| 免费在线看v| av二区三区| 国产黄a三级三级三级av在线看| 九九热免费在线视频| 夜色资源网av在先锋网站观看| 国产一级又黄| 国产专区在线| 久久99精品久久久久久野外| 亚洲第一区视频| 午夜影院在线| 日本精品一区二区三区在线播放| av一本在线| 夜夜爽视频导航| 在线观看午夜av| 精品极品三级久久久久| 国产精品免费视频一区一| 国产69久久| 午夜不卡视频| 1区2区3区在线| 国产精品久久久久久福利| 国产你懂的在线观看| 国产中文字幕在线| 最近中文字幕mv免费高清在线| 成年人在线观看| 国产一二三区在线| 国产福利小视频在线| 中文资源在线网| eeuss影院www在线观看| 快射av在线播放一区| 国产羞羞视频在线观看| 国产极品视频| 99综合精品久久| jizz亚洲| 国产一起色一起爱| 91亚洲精选| 狠狠狠综合7777久夜色撩人| 成人无遮挡免费网站视频在线观看| 国产麻豆精品视频一区二区 | 最近中文字幕大全中文字幕免费| 国产女王在线**视频| 国产主播福利在线| 国产欧美在线观看视频| 99热99re6国产在线播放| 国产中文第一页| 91极品在线| 丁香综合在线| 四虎成人精品在永久在线观看| 国产中文在线观看| 亚洲精品视频区| 国产黄色免费网站| 美女av在线播放| 99爱视频在线观看| 国产小视频福利在线| 另类专区欧美| 日本亚洲欧美| 国产私人尤物无码不卡| 久久久久久91精品色婷婷| 精品欧美色视频网站在线观看| 天天av天天爽| 九九视频在线播放| 九色精品视频在线观看| 先锋av资源网| av在线播放av| 在线观看午夜av| 在线观看视频污| 伊人影院在线观看| 永久免费av网站| 亚洲综合色视频在线观看| 中文一区在线观看| av在线free| 在线观看中文字幕| 亚洲精品天堂在线| www操操操| 任你操在线观看| www中文字幕在线观看| www.毛片| 丁香在线视频| 国产区在线视频| 国产黄色在线| 在线三级中文| 超碰免费97在线观看| 国产一区二区影视| 精品一区二区91| 青青草视频免费在线观看| 黄色片免费在线| 最新天堂资源在线资源| 国产精品777一区二区| 2021av在线| 青青草原国产在线| 中文字幕在线视频观看| 国产xxx在线| www.狠狠色.com| 五月天丁香在线| 亚洲精品aaaa| 国产中文字幕在线播放| 国产激情视频在线观看| av在线天天| 国产三级视频在线| 全网国产福利在线播放| 中文字幕国产视频| 91香蕉视频免费在线观看| h视频在线网站| 国产porn在线| 日韩av成人| 国产中文第一页| 亚洲an天堂an在线观看| 国产精品美女一区二区三区四区 | 国产中文字幕av| 一级二级在线观看| 国产一区二区三区美女秒播|