몇 가지 이미지를 만들고 몇 가지 테스트를 수행하여 다양한 기법의 성능에 영향을 줄 수 있습니다.
-rw-r--r-- 1 mark staff 13M 23 Aug 17:55 image.jpg
I :
나는
ls
이 같은 13메가바이트을 제공, 이미지가 무작위 차원에서 데이터 - 압축 - 어렵고 즉, 당신에 맞게 다음
convert -size 8000x6000 xc:gray +noise random -quality 35 image.jpg
filesizes 포함했다 내 컴퓨터의 8 개 CPU 코어로 나눌 수 있기 때문에 128 개의 임의의 이미지를 만들었습니다. 나중에 병렬 테스트를 참조하십시오. 방법에 대한 지금
... 1
이 순진한 방법이다
방법 - 당신은 당신이 하나씩, 요청 모든 파일을 만들 수 있습니다.
#!/bin/bash
for f in image*jpg; do
for w in 3000 2000 1000 500 250 100; do
convert $f -resize ${w}x res_${f}_${w}.jpg
done
done
시간 : 26 분 46 초 우리 한번만 각 화상을 판독하지만, 하나의 입력 화상의 모든 출력의 크기를 생성하는 2 여기
방법과 상당히 빠르다 .
#!/bin/bash
for f in image*jpg; do
convert $f -resize 3000x -write res_${f}_3000.jpg \
-resize 2000x -write res_${f}_2000.jpg \
-resize 1000x -write res_${f}_1000.jpg \
-resize 500x -write res_${f}_500.jpg \
-resize 250x -write res_${f}_250.jpg \
-resize 100x res_${f}_100.jpg
done
시간 : 6 분 17 초
방법 다음 3
우리는 우리가 필요로하는가는 최대 화상 만 3000x2250 픽셀임을 선행 ImageMagick를 조언, 그래서 더 적은 메모리를 사용하고 적은 수의 DCT 레벨을 읽고 적은 I/O를 수행 할 수 있습니다. 이것을 "shrink-on-load"라고합니다.
#!/bin/bash
for f in image*jpg; do
convert -define jpeg:size=3000x2250 $f \
-resize 3000x -write res_${f}_3000.jpg \
-resize 2000x -write res_${f}_2000.jpg \
-resize 1000x -write res_${f}_1000.jpg \
-resize 500x -write res_${f}_500.jpg \
-resize 250x -write res_${f}_250.jpg \
-resize 100x res_${f}_100.jpg
done
시간 : 3 분 37의
그냥 옆으로, 당신은 ImageMagick를 말할 때, I/O 및 메모리가 필요한 감소 된 시간을 보여주기 위해 선행 당신이 필요로하는거야 얼마나 큰 4백15메가바이트 2 초
즉 /usr/bin/time -l convert image.jpg -resize 500x result.jpg 2>&1 | egrep "resident|real"
1.92 real 1.77 user 0.14 sys
415727616 maximum resident set size
: 이미지는 업 프런트, 모두 당신 8000x6000, 13메가바이트 이미지 중 하나를 읽고 모두 같은 썸네일을 생성,이 두 가지 명령을 비교
/usr/bin/time -l convert -define jpeg:size=500x500 image.jpg -resize 500x result.jpg 2>&1 | egrep "resident|real"
0.24 real 0.23 user 0.01 sys
23592960 maximum resident set size
즉, 23MB 및 0.2 초 - 출력 이미지의 내용과 품질은 동일합니다.
방법 4 여기서 우리는 미친 당신의 CPU의 팬과 전력 소비를 보내는 모든 아웃 가서 모든 전술 한 기술뿐만 아니라 GNU가 병렬 사용
!
#!/bin/bash
for f in image*jpg; do
cat<<EOF
convert -define jpeg:size=3000x2250 $f \
-resize 3000x -write res_${f}_3000.jpg \
-resize 2000x -write res_${f}_2000.jpg \
-resize 1000x -write res_${f}_1000.jpg \
-resize 500x -write res_${f}_500.jpg \
-resize 250x -write res_${f}_250.jpg \
-resize 100x res_${f}_100.jpg
EOF
done | parallel
시간 : 56초 요약
우리 말해서 불필요 회피 화상을 판독하고 가능한 입력에 따라 많은 출력을 수행하여 56초 27 분의 처리 시간을 감소시킬 수있다 ImageMagick은 입력 이미지의 양을 읽고 GNU Parallel을 사용하여 멋진 CPU 코어를 모두 사용하도록합니다. HTH.
* "이미지가 플랫 파일에 저장됩니다"* 무엇을 의미합니까? 'JPEG' 또는'TIFF' 또는 someesuch를 의미합니까? 울퉁불퉁 한 파일은 무엇이겠습니까? –