2016-11-16 4 views
0

내 사진 웹 사이트는 인쇄 서비스에 연결되어 있지만 몇 가지 표준 종횡비 (2 : 3, 4 : 5, 1 : 1 등) 만 제공합니다. 내 사진의 대부분은 다른 종횡비를 사용하므로 인쇄물로 제공되지 않습니다.ImageMagick으로 크기를 조정하거나 자르지 않고 고정 된 종횡비로 이미지를 맞추는 방법은 무엇입니까?

이 문제를 해결하려면 ImageMagick CLI 나 다른 도구를 사용하여 이미지를 표준 가로 세로 비율, 예를 들어 4 : 5로 캔버스에 넣고 싶습니다. 어떤 단계에서 원본 이미지를 재 샘플링하거나 자르지 않아야하며 외부 치수 (캔버스) 만 커질 수 있습니다.

내가 함께 왔어요 개념은 :

  1. 표준이 아닌 가로 세로 비율이 원본 이미지를 가지고, 화이트와 모든 방향으로 20 %의 캔버스를 확장합니다. 이는 픽셀 크기가 이미지의 리샘플링을 필요로하기 때문에 소스 이미지 크기가 다양하기 때문에 상대적인 용어 여야합니다.
  2. 4 : 5 가로 세로 비율로 다른 흰색 캔버스 안에 결과적인 매트 된 이미지를 설정하십시오. 대부분의 경우 세로 또는 가로면이 잘 리지만 작물은 소스 이미지가 아닌 20 %의 흰색 경계에만 영향을 미칩니다.

출력은 고정 된 4 : 5 종횡비의 다양한 픽셀 치수의 이미지 여야하며 다양한 두께의 네 가장자리에 흰색 테두리가 있어야합니다. 나는 sample page with before and after views on my website을 만들었습니다.

매우 다양한 종횡비로 인해 다양한 대상 종횡비의 스크립트를 통해 여러 장의 사진을 여러 번 실행해야하며 각 종횡비에 대해 가장 균형 잡힌 종횡비를 선택해야합니다. 지루한,하지만 나는 그것을 자동화하는 방법이 있다고 생각하지 않습니다.

어떤 방법을 생각 하나? 또는 더 나은 제안?

웹 사이트가 아니라 Windows 또는 Linux에서 IM의 6.x를 사용하고 있습니다.

+0

원하는 코드 방법과 메신저 버전을 지정해야합니다. 버전 7 이상을 사용하는 경우 6 버전보다 간단해야합니다. 아마도 스크립트를 작성해야 할 것이고 -extent는 아마도 당신이 원하는 것을 할 것입니다 : https://www.imagemagick.org/script/command-line-options.php#extent – Bonzo

+0

선호하는 코드 방법은 무엇을 의미합니까? 버전은별로 중요하지 않습니다. – bramford

+0

스크립트가 Windows에서 Linux와 Mac에서 다를 수 있으므로 스크립트를 작성해야합니다. 당신이 웹 사이트에서 그것을하고 있다면 당신은 PHP를 사용할 수 있습니다. 버전 7에서는 fx 인라인을 사용할 수 있지만 버전 6에서는 사용할 수 없으므로 버전은 중요합니다. 이는 코드 행이 적다는 것을 의미합니다. – Bonzo

답변

0

나는 PHP로 작업하는 경향이 있지만 지금은 잠자리에 드는 것이지만 PHP와 버전 7을 사용하는 예가 있습니다. 버전 7에서 볼 수 있듯이 명령 내에서 계산을 할 수 있습니다. 버전 6에서는 변수에 저장된 별도의 행이어야하며 변수에 명령이 사용됩니다.

제대로 작동하는지 확인하기 위해서만 테스트를했는데 landscape/portrate 논리가 잘못된 방법 일 수 있습니다. 그러나 그것이 어떻게 작동 할 수 있는지에 대한 아이디어를 줄 것입니다. 위의 코드를 확인해야한다

<?php 
// Setup the image to use 
$image = '_MG_4949.jpg'; 
// Get the dimensions of the image into an array 
$size = getimagesize("$image"); 

// Aspect array 
$aspect = array(.87, 1.45); 

// If landscape original image do this 
If ($size[0] > $size[1]) { 
foreach ($aspect as $value) { 
    exec("magick $image -background white -gravity center -extent \"%[fx:w*1.2]\"x\"%[fx:w*$value]\" $value.jpg"); 
           } 
         } 
// If portrate image do this 
else { 
foreach ($aspect as $value) { 
    exec("magick $image -background white -gravity center -extent \"%[fx:h*$value]\"x\"%[fx:h*1.2]\" $value.jpg"); 
           } 
} 
?> 

EDIT 지금 여기

는 V6의 PHP 버전 (아무의 PHP getimagesize 기능이 시간) 당신이 비난 또는 배치 파일로 변환 할 수 있어야 두 버전이다.

// Setup the image to use 
$image = '_MG_6790.jpg'; 
// Get the dimensions of the image into an array 
$height = exec("identify $image -ping -format %[fx:h] info:"); 
$width = exec("identify $image -ping -format %[fx:w] info:"); 

// Aspect array 
$aspect = array(.87, 1.45); 

// If landscape original image do this 
If ($width > $height) { 
foreach ($aspect as $value) { 
    $newWidth = $width*1.2; 
    $newHeight = $height*$value; 
    exec("convert $image -background white -gravity center -extent {$newWidth}x{$newHeight} $value.jpg"); 
           } 
         } 
// If portrate image do this 
else { 
foreach ($aspect as $value) { 
    $newWidth = $width*$value; 
    $newHeight = $height*1.2; 
    exec("convert $image -background white -gravity center -extent {$newWidth}x{$newHeight} $value.jpg"); 
           } 
} 
+0

감사합니다!나는 캔버스를 확장하는 방법에 붙어 있었고, 범위가 답이었던 것처럼 보인다. – bramford