用PHP將CMYK格式的JPG文件轉爲RGB格式

imagick是一個PHP的擴展,用ImageMagick提供的API來進行圖片的創建與修改,不過這些操作已經包裝到擴展imagick中去了,最終調用的是ImageMagick提供的API. 

ImageMagick是一套軟件系列,主要用於圖片的創建、編輯以及轉換等,詳細的解釋見ImageMagick的官方網站http://www.imagemagick.org/,ImageMagick與GD的性能要高很多,如果是在處理大量的圖片時更加能體現ImageMagick的性能。 

1. 下載安裝ImageMagick 
Linux代碼  收藏代碼
  1. wget ftp://mirror.aarnet.edu.au/pub/imagemagick/ImageMagick-6.6.8-10.tar.gz  
  2.   
  3. tar -xzvf ImageMagick-6.6.8-10.tar.gz  
  4. ./configure --prefix=/usr/local/imagemagick  
  5. make  
  6. make install  


後來安裝ImageMagick6.8.6總是編譯失敗:magick/.libs/libMagickCore-6.Q16.so: undefined reference to `jpeg_default_qtables'所以不得不重新編譯libjpeg最新版本,下載jpegsrc.v9.tar.gz 
Linux代碼  收藏代碼
  1. tar -xzvf jpegsrc.v9.tar.gz  
  2. cd jpeg-9  
  3. ./configure  
  4. make libdir=/usr/lib64   
  5. make libdir=/usr/lib64 install  

曾經在一個服務器上,libdir參數必須有,否則錯誤仍在。我猜,如果不用libdir參數,而是在make install後執行  sudo ldconfig /usr/lib64(imagemagick官方說明)是否起到同樣效果.不懂C語言,悲劇啊! 

2. 下載安裝Imagick

yum install ImageMagick-devel

即可安裝ImageMagick-devel。


3. 下載安裝Imagick 
注:安裝該擴展不要求安裝ImageMagick 
從http://pecl.php.net/package/imagick找到imagick的最新的版本 
Linux代碼  收藏代碼
  1. wget http://pecl.php.net/get/imagick-3.1.0RC1.tgz  
  2.   
  3. tar -xzvf imagick-3.1.0RC1  
  4. cd imagick-3.1.0RC1
  5. phpize  
  6. ./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick  
  7. make  
  8. make install  


make install執行結果顯示: 
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/ 
Installing header files:          /usr/local/php/include/php/ 

生成imagick.so到/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/,然後手動配置php.ini使其生效


公司某個項目需要抓取pdf的縮略圖,最近有部分縮略圖無法在IE瀏覽器顯示,但是能夠在谷歌瀏覽器顯示。最後發現無法顯示的圖片圖像色彩爲CMKY,而CMKY在IE瀏覽器是無法顯示的。所以需要將圖像色彩CMKY轉爲RGB。 
關於ICC 文件 提供地址可以下載:

CMYK: http://www.mattbeals.com/icc/profiles/cmyk/USWebUncoated.icc.zip
RGB:http://www.mattbeals.com/icc/profiles/rgb/AdobeRGB1998.icc.zip

$im = new Imagick($filename);
if ($im->getImageColorspace() == Imagick::COLORSPACE_CMYK) {
          $i = new Imagick($filename);
          $profiles = $i->getImageProfiles('*', false);
          $has_icc_profile = (array_search('icc', $profiles) !== false);
          if ($has_icc_profile === false) {
               $icc_cmyk = file_get_contents('USWebUncoated.icc');
               $i->profileImage('icc', $icc_cmyk);
               unset($icc_cmyk);
           }
           $icc_rgb = file_get_contents('AdobeRGB1998.icc');
           $i->profileImage('icc', $icc_rgb);
           unset($icc_rgb);
           $i->writeImage($filename);
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章