2014-04-15 3 views
0

PHP에서 Imagick을 사용하여 PDF 파일을 JPEG로 변환하는 데 문제가 있습니다. 많은 연구 끝에 이상한 색상 변환없이 CMYK pdf를 RGB jpg로 변환 할 수 있습니다 ...하지만 지금은 마지막 문제입니다 : 텍스트가 완전히 별칭이 있습니다! 원본 PDF 파일의 텍스트는 벡터화되지 않습니다.PHP Imagick PDF 변환 텍스트 앨리어싱

예 :

$imagick = new Imagick(); 

$imagick->setResolution(150,150); 
$imagick->readImage('file.pdf'); 

//CMYK PROFILE 
$icc = file_get_contents('USWebCoatedSWOP.icc'); 
$imagick->profileImage('icc', $icc); 
$imagick->setImageColorspace(imagick::COLORSPACE_CMYK); 

//RGB PROFILE 
$icc = file_get_contents('sRGB_IEC61966-2-1_no_black_scaling.icc'); 
$imagick->profileImage('icc', $icc); 
$imagick->setImageColorspace(imagick::COLORSPACE_RGB); 

$imagick->setImageFormat("jpg"); 
$imagick->setImageCompression(imagick::COMPRESSION_JPEG); 
$imagick->setImageCompressionQuality(90); 

header("Content-Type: image/jpeg"); 
echo $imagick; 
+0

예제 PDF를 게시 할 수 있습니까? – Danack

+0

[예제 pdf] (http://lacentralepharma.com/flyer.pdf)! –

+0

감사합니다. 여기에 대답과 함께 중복 질문이 나타나는 것 같습니다 - http://stackoverflow.com/a/16435640/778719 그러나 허용 대답은 나를 위해 작동하지 않습니다,하지만 어쩌면 내가 뭔가 잘못하고 있어요. – Danack

답변

1

이미지 마법 (magick)은 실제로 PDF 파일을 렌더링하기 위해 고스트 스크립트를 사용하고 난 당신이 제대로 앤티 앨리어싱 수없는 텍스트가 a bug in it을 가지고 고스트 스크립트의 버전을 사용하고 생각합니다.

제공된 코드와 Ghostscript를 직접 호출하여 테스트했습니다. 기본적으로

gs -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=1 -sDEVICE=pngalpha -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r150 -sOutputFile=foo-%d.png flyer.pdf 

내 CentOS의 상자가 Imagick에서와 GS에서 호출 할 때 모두 위의 명령을, 당신이보고있는 문제를 보여줍니다 고스트 스크립트 버전 8.70을 사용하고 있었다. here에서 버전 9.14를 다운로드하면 명령 줄을 사용할 때 텍스트가 올바르게 앤티 앨리어스 처리되며 Imagick을 통해 호출 될 때도 마찬가지입니다.

+0

나는 그것이 있다고 생각한다! 내 서버에서 ghostscript를 업데이트하려고 시도했지만 yum 업데이트는 패키지가 업데이트로 표시되어 있지 않음 ... 나중에 자세히 조사하겠습니다! –

+1

해당 서버에서 파일을 다운로드하고 디렉토리에서 실행하면 업데이트 된 버전을 테스트 할 필요가 없습니다. – Danack

0

그것은 가장 가능성이 앤티 앨리어싱에 문제가되지 않습니다 : 여기에
Aliased text with pdf conversion

는 코드입니다.

해상도를 최대 400까지 높이고 어떤 결과가 발생하는지 확인하십시오.

$imagick->setResolution(400,400); 
+0

분명히 앨리어싱의 문제입니다 ... 해상도가 높을지라도 텍스트의 모양은 항상 동일합니다 ... 게시 한 스크린 샷은 크기가 조정되지 않고 픽셀이 정확히 표시됩니다! –

+0

시험해보세요. http://php.net/manual/en/imagick.setcompressionquality.php에서 첫 번째 주석은 PHP 버전에 따라 다른 명령이 사용된다고 말합니다. 아마 네가 일하지 않을거야? – Toly

+0

저는 이것이 해상도 문제이거나 압축 문제가 아니라고 99 % 확신합니다. 텍스트를 확대하면 jpeg 인공물이 전혀 없습니다. 해상도를 높이면 점점 좋아 지지만 1) 너무 무거워서 2) 여전히 별칭이 지정되어 있습니다. 이것은 앨리어싱 문제이지만, Google은이 질문에 내 친구가 아닌 것 같습니다! 나는 명령 줄과 imagemagick을 사용하는 더 많은 옵션이 있다는 것을 알아 냈고 dTextAlphaBits는 이런 종류의 문제에 대한 옵션처럼 들린다 ... PHP를 사용하여 비슷한 기능을 찾을 수 없다. –