2014-09-16 14 views
1

이미지 처리 라이브러리 WideImage을 사용하기 시작했으며 생성중인 JPEG 이미지의 품질에 문제가 있습니다. WideImage는 실제로 GD을 사용하므로 GD PHP 이미지 함수를 사용하여 테스트하고 있습니다.PHP 이미지 처리 GD JPEG 품질

내 목표는 이미지의 크기를 조정하는 궁극적이지만, 여기에 크기를 조절 일어나고없는 내 테스트 코드입니다 :

$srcImage = "path/to/image.jpg"; 
list($width, $height) = getimagesize($srcImage); 
$image_p = imagecreatetruecolor($width, $height); 
$image = imagecreatefromjpeg($srcImage); 
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width, $height); 
imagejpg($image_p, "path/to/image_resized.jpg", 100); 

이 작동하지만, 낮은 품질보다 원본 이미지의 버전을 세척 출력합니다. 나는 또한 크기 조정을 수행 할 때

Example Image

이 발생하지만 원본 이미지의 동일한 색상/품질을 유지하려면 : 다음은 중앙 아래로 원래의 분할 옆에 예입니다.

누구에게 어떻게 달성 할 수있는 아이디어가 있습니까? 아마 php.ini에 내가 놓친 것 같은 설정이 있습니까? 나는 또한 imagepng()를 사용하여 시도했지만 많은 결과를 보았다.

GD Support  : enabled 
GD Version  : bundled (2.1.0 compatible) 
FreeType Support : enabled 
FreeType Linkage : with freetype 
FreeType Version : 2.3.11 
T1Lib Support  : enabled 
GIF Read Support : enabled 
GIF Create Support: enabled 
JPEG Support  : enabled 
libJPEG Version : 6b 
PNG Support  : enabled 
libPNG Version : 1.2.49 
WBMP Support  : enabled 
XPM Support  : enabled 
libXpm Version : 30411 
XBM Support  : enabled 

감사 :

내가 PHP 버전 5.3.29을 사용하고

, 여기은 phpinfo에서 내 GD 정보는()입니다!

squeamish ossifrage 님의 요청에 따라 original fileconverted file이 있습니다. PHP 다음과 같은 명령을 생성

서버

설치 exiftool

:

-

편집 아래 올바른 표시 점잔 빼는 ossifrage의 대답에 따라, 나는이 문제를 해결하기 위해 다음과 같은 조치를 취했다

exiftool -TagsFromFile "/var/www/vhosts/path/to/image/the file name.jpg" -icc_profile "/var/www/vhosts/path/to/image-processed/the file name.jpg" 

는 PHP의 간부로 명령을 실행() 메소드 :

$arrOutput = array(); 
$return_var = ""; 
$directOutput = exec($exiftoolCommand, $arrOutput, $return_var); 

매력처럼 작동했습니다!

+0

:이 명령 줄에서 작동해야 /JpgChromaSub.html), 비록 이것이 GD에서 이것을 어떻게 달성 할 수 있는지 모르겠으나 평범한 추측이지만, 결과는 동일한 품질에서도 분명히 다릅니다. –

+0

이 문제는 _ ['imagecopyresampled()]가 한 이미지의 직사각형 부분을 다른 이미지로 복사 ** ** 부드럽게 픽셀 값 **을 보간하기 때문에 발생합니다 (http://php.net/manual/en/function.imagecopyresampled.php) _. ['imagecopy()'] (http://php.net/manual/en/function.imagecopy.php) 또는 ['imagecopyresize()'] (http://php.net/manual/ko/)를 사용해보십시오. function.imagecopyresized.php) 대신에 고유 한 재 인코딩이 일어나기 때문에 훨씬 더 좋아질 것이라고 생각하지 않습니다. – timclutton

+0

대신 ImageMagick을 사용 하시겠습니까? – bbeckford

답변

3

원본 이미지에 ICC 색상 프로파일이 포함되어 있습니다. GD는 컬러 프로파일에 대해 아무 것도 모르기 때문에이 정보는 변환 된 파일에서 누락되었습니다. 색상 프로파일이없는

  1. 원본 파일을 저장하거나 변환 된 파일을 원본 파일에서

  2. 복사 색상 프로파일 :이 문제를 해결하려면, 당신은 기본적으로 두 가지 옵션이 있습니다.

컬러 프로필 및 기타 EXIF ​​정보가 정당한 이유없이 대역폭을 사용하므로이 파일을 웹에 게시하려는 경우 옵션 1을 사용합니다.

또는 exiftool과 같은 무료 도구를 사용하여 한 파일에서 다른 파일로 색상 프로파일을 복사 할 수 있습니다.`내 첫번째 추측이 그 사용입니다 WideImage` 다른 [크롬 서브 샘플링 (http://users.wfu.edu/matthews/misc/jpg_vs_gif/JpgCompTest 모른 채

exiftool -TagsFromFile so_original.jpg -icc_profile so_converted.jpg 
+0

+1 : 유용한 답변과 유용한 해결 방법이 있습니다. –

+0

exiftool은 매력처럼 일했습니다! 감사합니다 @ scamishishifrage! 질문에 사용한 코드를 게시했습니다. – bbeckford

+0

다른 프로그램에서도이 문제가 특히 JPEG 2000에서 발생합니다. 그러나 http://www.dlib.org/dlib/may11/vanderknijff/05vanderknijff.html ImageMagick은 JPEG 파일의 ICC 프로필을 올바르게 보존합니다. – Nemo