이 기사의 예에서는 이미지 자르기, 회전, 선명하게 하기, 색상 감소 또는 특수 효과 추가를 구현하는 php_imagick의 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.
PHP가 ImageMagick 함수를 호출할 수 있게 해주는 PHP 확장입니다. 이 확장을 사용하면 PHP가 ImageMagick과 동일한 기능을 가질 수 있습니다.
ImageMagick은 인기 있는 TIFF, JPEG, GIF, PNG, PDF, PhotoCD 및 기타 형식을 포함하여 185개 이상의 기본 형식으로 된 이미지 파일을 읽고, 쓰고, 처리하는 데 사용할 수 있는 강력하고 안정적인 무료 도구 세트 및 개발 패키지입니다. . ImageMagick을 사용하면 웹 애플리케이션의 필요에 따라 이미지를 동적으로 생성할 수 있으며, 크기를 변경하고, 회전하고, 선명하게 하고, 색상을 줄이고, 이미지(또는 이미지 그룹)에 특수 효과를 추가하고 결과를 저장할 수도 있습니다. 같은 형식으로 저장하거나 다른 형식으로 저장하세요.
php_imagick은 PHP 이미지 처리용 확장 패키지로, 크기 변경, 회전, 선명하게 하기, 색상 빼기, 이미지에 특수 효과 추가 등의 작업을 완료할 수 있습니다.
1. Windows에 Imagick 확장 프로그램을 설치합니다.
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에
추가확장자=php_imagick.dll, 웹 서버 다시 시작
2. Linux에 Imagick 확장 프로그램 설치:
1.yum ImageMagick 설치
yum 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 설치
4. php.ini 파일을 편집하고 파일 끝에 다음 코드를 추가합니다
확장자=imagick.so
5.아파치 서버 다시 시작
서비스 httpd 재시작
3. 사례
1. 국경 처리
php_imagick 프로그램 예
1. 썸네일을 생성하고 표시합니다
예:
썸네일 자르기/생성/워터마크 추가, GIF 자동 감지 및 처리
통화 방법:
클래스 lib_image_imagick
{
개인 $이미지 = null;
개인 $ 유형 = null;
// 构造函数
공개 함수 __construct(){}
// 析构函数
공개 함수 __destruct()
{
if($this->image!==null) $this->image->destroy();
}
// 载入图이미지
공개 함수 열기($path)
{
$this->image = 새로운 Imagick( $path );
if($this->image)
{
$this->type = strtolower($this->image->getImageFormat());
}
$this->이미지를 반환합니다.
}
공개 함수 자르기($x=0, $y=0, $width=null, $height=null)
{
if($width==null) $width = $this->이미지->getImageWidth()-$x;
if($height==null) $height = $this->image->getImageHeight()-$y;
if($width<=0 || $height<=0) return;
if($this->type=='gif')
{
$이미지 = $this->이미지;
$canvas = 새로운 Imagick();
$이미지 = $이미지->coalesceImages();
foreach($이미지를 $프레임으로){
$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->이미지 = $canvas;
}
그렇지 않으면
{
$this->이미지->cropImage($width, $height, $x, $y);
}
}
/*
* 更改图이미지대소
$fit: 适应大小方式
'force': 把图文强建变shape成 $width X $height 큼직한
'크기': 按比例在安全框 $width X $height 内缩放图picture, 输流缩放后图image大小 不完全等于 $width X $height
'scale_fill': 按比例可设置背景填充color $bg_color = array(255,25) 5,255)(红,绿,蓝, 透명도) 透명도(0不透명-127完全透명))
其它: 智能模能 缩放图image并载取图이미지적中间부분분 $width X $height image素大小
$fit = 'force','scale','scale_fill' 时: 输 Out完整图image
$fit = 图image方位值 时, 输 Out指定位置part分图image
字母与图image的对应关系如下:
북서쪽 북쪽 북동쪽
서쪽 중앙 동쪽
남서쪽 남쪽 남동쪽
*/
공개 함수 resize_to($width = 100, $height = 100, $fit = 'center', $fill_color = array(255,255,255,0) )
{
스위치($fit)
{
'force'의 경우:
if($this->type=='gif')
{
$이미지 = $this->이미지;
$canvas = 새로운 Imagick();
$이미지 = $이미지->coalesceImages();
foreach($이미지를 $프레임으로){
$img = 새로운 Imagick();
$img->readImageBlob($frame);
$img->thumbnailImage( $width, $height, false );
$canvas->addImage( $img );
$canvas->setImageDelay( $img->getImageDelay() );
}
$image->destroy();
$this->이미지 = $canvas;
}
그렇지 않으면
{
$this->이미지->thumbnailImage( $width, $height, false );
}
부서지다;
사례 '규모':
if($this->type=='gif')
{
$이미지 = $this->이미지;
$이미지 = $이미지->coalesceImages();
$canvas = 새로운 Imagick();
foreach($이미지를 $프레임으로){
$img = 새로운 Imagick();
$img->readImageBlob($frame);
$img->thumbnailImage( $width, $height, true );
$canvas->addImage( $img );
$canvas->setImageDelay( $img->getImageDelay() );
}
$image->destroy();
$this->이미지 = $canvas;
}
그렇지 않으면
{
$this->이미지->thumbnailImage( $width, $height, true );
}
부서지다;
케이스 'scale_fill':
$size = $this->이미지->getImagePage();
$src_width = $size['너비'];
$src_height = $size['높이'];
$x = 0;
$y = 0;
$dst_width = $폭;
$dst_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 );
}
$이미지 = $this->이미지;
$canvas = 새로운 Imagick();
$color = 'rgba('.$fill_color[0].','.$fill_color[1].','.$fill_color[2].','.$fill_color[3].')';
if($this->type=='gif')
{
$이미지 = $이미지->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->이미지 = $canvas;
부서지다;
기본값:
$size = $this->이미지->getImagePage();
$src_width = $size['너비'];
$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;
부서지다;
'west'의 경우:
$crop_x = 0;
$crop_y = intval( ($src_height-$crop_h)/2 );
부서지다;
사례 'center':
$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 );
}
$이미지 = $this->이미지;
$canvas = 새로운 Imagick();
if($this->type=='gif')
{
$이미지 = $이미지->coalesceImages();
foreach($이미지를 $프레임으로){
$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->이미지 = $canvas;
}
}
// 添加water印图이미지
공개 함수 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')
{
$이미지 = $this->이미지;
$canvas = 새로운 Imagick();
$이미지 = $이미지->coalesceImages();
foreach($image를 $frame으로)
{
$img = 새로운 Imagick();
$img->readImageBlob($frame);
$img->drawImage($draw);
$canvas->addImage( $img );
$canvas->setImageDelay( $img->getImageDelay() );
}
$image->destroy();
$this->이미지 = $canvas;
}
그렇지 않으면
{
$this->이미지->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->이미지->annotateImage($draw, $x, $y, $angle, $text);
}
}
// 保存到指定路径
공개 함수 save_to( $path )
{
if($this->type=='gif')
{
$this->이미지->writeImages($path, true);
}
그렇지 않으면
{
$this->이미지->writeImage($path);
}
}
// 출동상
공개 함수 출력($header = true)
{
if($header) header('콘텐츠 유형: '.$this->type);
echo $this->image->getImagesBlob();
}
공개 함수 get_width()
{
$size = $this->이미지->getImagePage();
$size['너비']를 반환합니다.
}
공개 함수 get_height()
{
$size = $this->이미지->getImagePage();
$size['높이']를 반환합니다.
}
// 设置图image类型, 默认与源类型一致
공개 함수 set_type( $type='png' )
{
$this->유형 = $유형;
$this->이미지->setImageFormat( $type );
}
// 获取源图image类型
공개 함수 get_type()
{
$this->유형을 반환합니다.
}
// 当前对象是否为图文
공개 함수 is_image()
{
if( $this->image )
사실을 반환;
그렇지 않으면
거짓을 반환;
}
공개 함수 축소판($width = 100, $height = 100, $fit = true){ $this->image->thumbnailImage( $width, $height, $fit );} // 生成缩略图 $fit为真时将保持比例并在security框 $width X $height 内生成缩略图picture
/*
添加一个边框
$width: 左右边框宽degree
$height: 上下边框宽degree
$color: Color: RGB 색상 'rgb(255,0,0)' 또는 16진수 색상 '#FF0000' 또는 색상 단어 'white'/'red'...
*/
공용 함수 border($width, $height, $color='rgb(220, 220, 220)')
{
$color=new ImagickPixel()
$color->setColor($color)
$this->이미지->borderImage($color, $width, $height)
}
공용 함수 Blur($radius, $sigma){$this->image->blurImage($radius, $sigma);} // 블러
공개 함수 gaussian_blur($radius, $sigma){$this->image->gaussianBlurImage($radius, $sigma);} // 가우스 블러
공개 함수 Motion_blur($radius, $sigma, $angle){$this->image->motionBlurImage($radius, $sigma, $angle);} // 모션 블러
public function Radial_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 function oil_paint($radius){$this->image->oilPaintImage($radius);} // 유화 효과
public function flop(){$this->image->flopImage();} // 가로 뒤집기
public function Flip(){$this->image->flipImage();} // 수직 뒤집기
}
이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.