>

동일해야하는 두 개의 이미지를 만들지 만 이진 파일이 다릅니다 :

$ convert -size 1x1 xc:white out1/w.png
$ sleep 1
$ convert -size 1x1 xc:white out2/w.png
$ diff out1/w.png out2/w.png 
Binary files out1/w.png and out2/w.png differ

아마도 메타 데이터에 타임 스탬프가있을 수 있습니다.

질문: ImageMagick이 항상 같은 바이너리를 만드는 방법?

<시간> 컨텍스트

대부분의 개발자가 스크립트를 실행하는 데 필요한 환경이 없기 때문에 많은 이미지를 만든 다음 Git에 저장하는 큰 ImageMagick 스크립트가 있습니다.

필자는 종종 스크립트를 편집하고 (예 : 새 이미지 정의) 모든 이미지를 재생성하기 위해 실행합니다. 그러나 변경되지 않은 이미지에 대해서는 Git 차이를 원하지 않습니다.

분명히 일부 압축 알고리즘은 아키텍처에 따라 약간 다른 결과를 생성합니다. 항상 같은 컴퓨터에서 생성하기 때문에 큰 문제는 아닙니다. 그러나 같은 컴퓨터에서도 파일은 항상 다릅니다.

ImageMagick 6.8.9-9 Q16 x86_64 2015-08-06, Ubuntu 2015.10

  • 답변 # 1

    -define png:exclude-chunks=date,time 를 사용하여 타임 스탬프를 제거 할 수 있어야합니다. ;PNG 인코더에 버그가있는 것 같습니다.

    수정을 준비 할 수 있다면 identify 를 사용하는 것이 좋습니다 이미지의 픽셀 내용이 변경되는 경우 기존 이미지 만 바꾸는의 서명 :

    mkdir out
    convert -size 1x1 xc:white out/w.png
    if [ ! -f w.png ]; then
        mv out/w.png w.png
    else
        if [ "$(identify -verbose w.png | awk '/ignature/ { print $2 }')" != "$(identify -verbose out/w.png | awk '/ignature/ { print $2 }')" ]; then
            mv out/w.png w.png
        else
            rm out/w.png
        fi
    fi
    
    

  • 답변 # 2

    -strip 를 사용할 수 있습니다  옵션 :

    $ convert -strip -size 1x1 xc:white out1/w.png
    $ convert -strip -size 1x1 xc:white out2/w.png
    $ md5sum out1/w.png out2/w.png 
    <...same data...> *out1/w.png 
    <...same data...> *out2/w.png
    
    

    수정 :

    PNG 인코더에 버그가있을 수 있으므로이 방법으로 문제가 해결되지 않으면 다음 중 하나를 시도하십시오.

    와이즈 비즈  옵션은 생성 된 파일에서 특정 정보를 제거합니다. 여기서는 생성 날짜와 수정 날짜를 제거합니다.

    +set
    
    

    또는 (두 번째 양식은 자신에게 맞는 것을 선택하여 테스트하십시오)

    $ convert +set date:create +set date:modify -size 1x1 xc:white out1/w.png
    $ convert +set date:create +set date:modify -size 1x1 xc:white out2/w.png
    
    

    소스 : http://www.imagemagick.org/script/command-line-options.php

    $ convert +set date:create +set modify-date -size 1x1 xc:white out1/w.png $ convert +set date:create +set create-date -size 1x1 xc:white out2/w.png

  • 이전 quota - edquota에서 사용되는 단위 측정은 무엇입니까?
  • 다음 유닉스 쉘 스크립트에서 db2 SQL 내부의 매개 변수 전달