이미지 자르기, 회전, 선명하게 하기, 색상 감소 또는 특수 효과 추가를 구현하는 php_imagick 방법_php 기술

WBOY
풀어 주다: 2016-05-16 20:28:21
원래의
999명이 탐색했습니다.

이 기사의 예에서는 이미지 자르기, 회전, 선명하게 하기, 색상 감소 또는 특수 효과 추가를 구현하는 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. 국경 처리

코드 복사 코드는 다음과 같습니다.
header('Content-type: image/jpeg')
$image = new Imagick('test.jpg')
$color=new ImagickPixel()
$color->setColor("rgb(220,220,220)")
$image->borderImage($color,5,4)
$image->blurImage(5,5,imagick::CHANNEL_GREEN)
echo $image;

먼저 간단한 예를 살펴보겠습니다

php_imagick 프로그램 예

1. 썸네일을 생성하고 표시합니다

코드 복사 코드는 다음과 같습니다.
header('콘텐츠 유형: 이미지/jpeg')
$image = new Imagick('image.jpg')
// 너비나 높이 매개변수로 0을 제공하면 // 가로세로 비율이 유지됩니다.
$이미지->thumbnailImage(100, 0)
$이미지를 에코
?>

2. 디렉토리에 썸네일을 생성하고 저장합니다
코드 복사 코드는 다음과 같습니다.
$images = new Imagick(glob('images/*.JPG'))
foreach($이미지를 $이미지로) {
// 가로 세로 비율을 유지하기 위해 0 강제로 축소판 이미지 제공
$이미지->thumbnailImage(1024,0)
}
$이미지->writeImages()
?>

3. 썸네일 GIF 애니메이션 사진
코드 복사 코드는 다음과 같습니다.
/* 새로운 imagick 객체를 생성하고 GIF로 읽습니다 */
$im = new Imagick("example.gif")
/* 모든 프레임 크기 조정 */
foreach($im을 $frame으로) {
/* 50x50 프레임 */
$frame->thumbnailImage(50, 50)
/* 가상 캔버스를 올바른 크기로 설정 */
$프레임->setImagePage(50, 50, 0, 0)
}/* writeImage 대신 writeImages에 주목하세요 */
$im->writeImages("example_small.gif", true)
?>

이제 본론으로 들어가겠습니다.

예:

썸네일 자르기/생성/워터마크 추가, GIF 자동 감지 및 처리

통화 방법:

코드 복사 코드는 다음과 같습니다.
'imagick.class.php'를 포함합니다. 
$이미지 = 새로운 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

 개인 $이미지 = 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 프로그래밍 설계에 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿