2012-02-24 4 views
2

3 이미지 자르기 알고리즘은, 치수, 자르기, 센터 작물을 읽습니다.4 : 나는 펄</p> 내가 크기 조정, 썸네일처럼 필요한 모든 작업을 수행 할 기능 코드를 작성했습니다 <pre><code>use Image::Magick; </code></pre> <p>에 대한 ImageMagick를 사용하고

은 내가 폭보다 크거나 같은 높이로 어떤 이미지를 버리도록 모든 사진은 풍경입니다 요구 사항을해야합니까.

내가 크기를 조정하기 전에 자르기되어 고민하고 문제. 사진은 4 : 3 종횡비 여야합니다. 일부 사진은 새 16 : 9 형식으로 제공되거나 서버로 보내기 전에 잘 렸을 수 있으므로 화면에 왜곡이 생길 수 있습니다. 크기를 조정하기 전에 가장 가까운 4 : 3 이미지로 자릅니다. 예를 들어, 800/600은 괜찮지 만 802/600은 중심을 800/600으로 자릅니다.

나는 600분의 800의 최대 영상에 모든 사진, 자른 크기의 regarless 크기를 조정되지만 그 요정 무관하다. 나는 높이와 너비의 크기를 미리 읽을 수 있기 때문에 아마도 가장 가까운 매치를 계산할 수있는 알고리즘이있을 것입니다. 필자는 ImageMagick 내에서이 작업을 수행 할 수있는 기능이 없으면 ImageMagick이 아닌 새로운 차원을 가져 오는 데 도움이 필요합니다.

그러나, 나는 않습니다 실패 안착 하나 있었다.

+0

당신은 같은 의미 : 폭> 4.0/3.0 * 높이 다음 newWidth = 4.0/3.0 높이 다른 newHeight = 3.0/4.0 * 폭이 경우? – vmpstr

+0

이것은 내가 디지털 사진 프레임에로드 한 사진과 관련이 있습니다. 내 멋진 카메라 중 하나는 16x9 크기의 사진이 찍히지 만 멋지지만 프레임에서 멋지게 보입니다. 자르기 크기가 유일한 문제는 아닙니다 : 여분을 잘라내는 위치를 결정해야합니다 : 양면에 동일하게, 다른 곳에서 등등. –

+0

그냥 중심을 찾은 다음 잘라내 기 차원에 도달 할 때까지 측정하십시오. $ image-> 자르기 ('800x600 + $ x + $ y'); 여기서 $ x는 원본 이미지 너비의 1/2이고 $ y는 원래 이미지 높이의 1/2입니다. – chrisrth

답변

6

은 나를 위해 일한 :

my $image_width = 800; # play with this when testing 
my $image_height = 600; 

my $target_aspect = 4/3; 
my $current_aspect = $image_width/$image_height; 

given ($current_aspect <=> $target_aspect) { 
    when (1) { $image_width = int($image_height * $target_aspect); } 
    when (-1) { $image_height = int($image_width/$target_aspect); } 
} 
+0

감사합니다. 곧 시험해 보겠습니다. – chrisrth

+0

완벽한 솔루션. – chrisrth