2014-09-08 3 views
3

CCITT 그룹 4 압축을 사용하여 24bpp 비트 맵을 검정색 & 흰색 TIFF로 변환하려고합니다. 결과는 예상대로 TIFF 1 bpp 이미지이지만 압축되지 않았습니다. http://filehorst.de/d/bmqjzDuB에서Magickwand를 TIFF 및 CCITT 그룹 4 압축으로 변환하면 압축되지 않은 이미지가 나타납니다.

MagickWandGenesis; 
wand := NewMagickWand; 
try 
    status := MagickReadImage(wand,PChar(InputFile)); 
    if (status = MagickFalse) then HandleError; 

    status := MagickSetImageFormat(wand,'TIFF'); 
    if (status = MagickFalse) then HandleError; 

    // convert to black & white/lineart 
    status := MagickSetImageType(wand,BilevelType); 
    if (status = MagickFalse) then HandleError; 

    // Group4Compression seems defined as 4 which 
    // apparently doesn't match imagemagick source. Bug: 
    //http://mantis.freepascal.org/view.php?id=26723 
    status := MagickSetImageCompression(wand,CompressionType(7)); //was Group4Compression 
    if (status = MagickFalse) then HandleError; 

    // Apparently set(image)compresionquality and 
    // stripimage are necessary to actually compress 
    status := MagickSetImageCompressionQuality(wand,0); 
    if (status = MagickFalse) then HandleError; 
    status := MagickStripImage(wand); 
    if (status = MagickFalse) then HandleError; 

    status := MagickWriteImage(wand,PChar(OutputFile)); 
    if (status = MagickFalse) then HandleError; 

finally 
    wand := DestroyMagickWand(wand); 
end; 
MagickWandTerminus; 

소스 이미지

http://filehorst.de/d/bluhjivq

원본에서

원래 (결함) 프로그램 소스 코드 (: 나는 바인딩을 magickwand 한 프리 파스칼과 상태를 사용하고

는 MagickFalse 결코 오류) 출력 이미지 http://filehorst.de/d/bhlbjHgp

내가 뭘 잘못하고 있니?

편집 : 해결; 솔루션을 오프 사이트에 가져 왔습니다 : FreePascal 바인딩의 CompressionType 열거 형이 오래된 것 같습니다. Group4 압축은 4 (IIRC)이지만 7이어야합니다.

나는 그의 대답이 Mark Setchell에게 주어지기를 바란다. 솔루션의 필수 부분. 위의 소스 코드가 올바른 버전으로 업데이트되었습니다.

+0

아마 magicksetimagcompressressionquality도 설정할 수 있습니까? 또한 group4 압축으로 찾을 수있는 유일한 코드 단편은 http://www.imagemagick.org/discourse-server/viewtopic.php?f=6&t=15373#p54307을 참조하십시오. –

+0

아니요, 도움이되지 않습니다 ... – reiniero

+0

Are 당신은 ImageMagick의 최신 버전을 사용하고 있습니까? 이것은 수정 된 버그 일 수 있습니다. – dlemstra

답변

0

적어도 PHP 버전에서는 압축 유형을 설정해도 실제로 이미지가 압축되지 않는 것으로 보입니다 (아래 here의 주석 참조).

또한 모든 예제에서 실제로 압축을 수행하려면 MagickSetImageCompressionQuality()StripImage()을 호출해야 함을 알았습니다 - here을 참조하십시오.

+0

감사합니다. 불행히도 MagickSetImageCompressionQuality (0 또는 100) 및 MagickStripImage를 쓰기 직전에 추가해도 아무 효과가 없습니다. 코드를 파이썬이나 PHP로 변환 해보고 리눅스 테스트 시스템에서 실행 해 보겠습니다. – reiniero

+0

감사합니다. 마크, 마크를 추가해야하지만 다른 문제가 있습니다. 해결됨 - 위 참조. – reiniero

+0

도움의 즐거움을 기쁘게 생각합니다! 프로젝트와 함께 행운을 빌며 감사합니다 .-) –

관련 문제