2014-11-09 6 views
4

나는 100 개의 PNG 파일을 가지고 있으며 각각 8250x4090 크기입니다. 필자는 10 개의 행과 10 개의 열을 갖도록 Imagemagick을 하나의 큰 PNG 파일 (82500 x 40900)에 추가해야합니다. 코드가 어떻게 보이는지 알아야하지만 오류가 발생합니다. convert.exe : 캐시를 확장 할 수 없습니다.ImageMagick 메모리 사용량

`C:\Row_345.png': No space left on device @ error/cache.c/OpenPixelCache/3689. 
convert.exe: Memory allocation failed `C:\Row_345.png' @ error/png.c/WriteOnePNGImage/8725. 

첫 번째 질문 : 얼마만큼의 공간이 필요합니까? 8GB의 RAM과 30GB의 무료 SSD가 있는데 충분하지 않았습니다. 사진에는 ​​최대 5 가지 색상의 다각형과 선이 있습니다. 가장 큰 PNG는 300KB입니다. 두 번째 질문 : 더 많은 공간을 사용하지 않도록 더 영리하게 만드는 방법이 있습니까?

답변

11

ImageMagick를 픽셀 당 8 바이트가 필요합니다. Q8 빌드는 픽셀 당 4 바이트 만 필요합니다.

82,500 * 40,900 * 8 = 약 27Gbytes 82,500 * 40900 * 4 = 13.5 기가 바이트

PNG의 크기는 관련이 없다; ImageMagick은 그것들을 압축하지 않고 저장합니다.

아마도 ImageMagick은 100 개의 작은 이미지와 큰 결과의 두 개의 복사본을 보유하려고 시도하고 있습니다. ImageMagick-Q8로 변환을 실행하기에 충분한 메모리와 디스크가 필요할 수도 있습니다.

+0

감사합니다. 나는 Mark Setchells의 대답과 당신의 대답을 합쳐서 그것이 효과가있었습니다. 그러나 한 가지 질문 : Q8에 낮은 품질이나 이와 비슷한 단점이 있습니까? – Selphiron

+0

일반적으로 Q8은 Q16만큼 정확하지 않습니다. 그러나 "-append"를 포함한 특정 작업의 경우 원래 PNG 파일의 bit_depth가 8 이하가되면 무손실이어야합니다. –

+0

나는 PNG 파일의 bit_depth를 찾는 방법을 모른다. 이 (http://i.imgur.com/Nbm9z8w.png)의 bit_depth가 8이라고 생각하십니까? – Selphiron

6

한 번에 10 번 한 행을 10 번만 수행하면 10 행 10 개가됩니다. 그런 다음 row1과 row2를 수행하십시오. 그런 다음 행 1 & 2 플러스 3 행

convert 1.png 2.png 3.png ... +append row1.png 
convert 11.png 12.png 13.png ... +append row2.png 
... 
convert 91.png 92.png 93.png ... +append row10.png 

그런 다음

convert row1.png row2.png -append row1and2.png 

는이처럼 ImageMagick를 convert 명령에 -debug cache을 추가 할 수 있습니다

convert -debug cache 1.png 2.png 3.png ... +append row1.png 

또한 리소스를 볼 수 있습니다 다음과 같이 ImageMagick에서 사용할 수있는 것의 설정 :

이 같은3210
identify -list resource 

File   Area  Memory   Map   Disk Thread   Time 
------------------------------------------------------------------------------- 
768  1.0386GB 3.8692GiB 7.7384GiB unlimited   4 unlimited 

그리고 증가 자료 : 당신이 Q16 빌드를 사용하는 경우

convert -limit memory 32MiB ... 
+0

나는 또한 행에 아이디어가 있었지만 여전히 같은 오류가있었습니다. 내가 시도 할 것이다 - 캐시 및 제한 메모리, 감사합니다! – Selphiron

+0

그래서 나는 내 문제를 해결하기 위해 당신과 글렌 랜더스 - 페르손 (Glenn Randers-Pehrsons)의 대답을 결합해야했습니다. 어떤 대답을 받아 들여야합니까? – Selphiron

+1

글렌 (Glenn)과 함께 가세요 - 그가 2,000 점을 얻게되어 기쁩니다! –