2017-05-10 17 views
2

Magick ++ (IM 7.0.3 플랫폼 : CentOS Linux 릴리즈 7.0)를 사용하여 이미지를 gif로 변환합니다. 내가 파일에서 이미지 개체를 만들 때, 문제는 내가 9 png 파일 (각 50kb)을 gif로 변환 할 때만 50ms 밖에 걸리지 않는다는 것입니다. 그러나 9 jpg 파일 (각 20kb)로 바뀌면 1900ms가 걸립니다. 그 이유는 무엇입니까? jpg 파일로 어떻게 더 빨리 만들 수 있습니까?ImageMagick jpg 이미지를 gif slow로 변환합니다.

for(int i = 2; i < argc-1; i++) 
    { 
    // I pass the file path from command line 
    cout << argv[i] << endl; 
    Image img(argv[i]); 
    img.animationDelay(delay); 
    img.magick("GIF"); 
    frames.push_back(img); 
    } 
    long mergestart = getCurrentTime(); 
    Magick::Blob tmpBlob; 
    Magick::writeImages(frames.begin(), frames.end(), &tmpBlob); 

답변

5

나는 JPEG 파일은 줄이고을 최적화하기 위해, 그래서 ImageMagick를 많이 더 많은 일을하도록 강요 당할 것이다 색상의 수천을해야합니다 반면 PNG 파일, palettised 중 하나 또는 상대적으로 적은 색상을 포함 추측 것 GIF에 포함될 수있는 상대적으로 작은 256 색 팔레트 색상

identify -verbose Any.PNG 

identify -verbose Any.JPG 

을하고 Number of colours보고 :

실행하여 파일에 내 이론을 확인하십시오. 당신은 당신이 처럼, 당신은 멀티 스레딩을 사용할 수 있습니다 처리 할 파일의 수천 또는 무언가를 가지고 있기 때문에 그것을 빨리 확인하려면

identify -format %k AnyImage.png 

:

양자 택일로, 당신은 색상을 계산하기 위해이 명령을 사용할 수 있습니다 한 번에 더 많은 일을하려면 GNU 병렬.

+0

도움 주셔서 감사합니다. 나는 IM 명령을 "식별"하지 않지만 php GD 라이브러리 imagecolorstotal 함수를 사용하여 jpg 색상 번호 0과 png 색상 번호 256을 얻었습니다. PNG 파일은 palettised입니까? –

+0

미안하지만 다른 질문이 있습니다. Magick :: Image obj 형식의 PNG를 만들려고했으나 blob로 이미지를 초기화하지 못했습니다 (blob은 cv :: imencode에 의해 생성 된 png 데이터로 생성 됨). 하지만 cv :: imencode jpg blob을 가진 init은 잘 동작합니다. 나는 이미지 프로세싱을 처음 사용하고 있으며 여기에 붙어있다. –

+0

v7 이상일 경우'magick identify ... '를 시도하십시오. –