2017-03-14 4 views
0
나는 iMagick에서 다음을 수행하려고 해요

의 중앙에 이미지와 장소의 크기를 조정하고 난 일하러 수 없습니다 이미지가 390 픽셀 이상 높은 경우는 다음의 크기를 조정하는 경우,캔버스

확인 크기를 유지하지 않으면 높이가 390 픽셀입니다.

흰색 캔버스를 300px 너비로 400px 높이로 추가 한 다음 이미지를 가운데에 배치합니다.

내 코드는 다음과 같습니다

$im = new imagick("test.jpg"); 
$imageprops = $im->getImageGeometry(); 
$width = $imageprops['width']; 
$height = $imageprops['height']; 
if($height > '390'){ 
$newHeight = 390; 
$newWidth = (390/$height) * $width; 
}else{ 
$newWidth = $imageprops['width']; 
$newHeight = $imageprops['height']; 
} 

$im->resizeImage($newWidth,$newHeight, imagick::FILTER_LANCZOS, 0.9, true); 

$canvas = new Imagick(); 
$canvas->newImage(300, 400, 'white', 'jpg'); 
$canvas->compositeImage($im, imagick::COMPOSITE_OVER, 100, 50); 

$canvas->writeImage("test-1.jpg"); 

이미지가 큰 사람은 원래의 크기로 남아있는 388 개의 이유로 높은 픽셀과 작은 것들로 조정됩니다 생산합니다.

합성 이미지에 100,50을 추가 한 큰 이미지에서 작동하지만 캔바스에 배치하는 것은 항상 올바르지 않습니다.

이미지의 대부분은 크고 얇지 만 키가 큰 것보다 더 넓은 이미지가 있습니다.

내가 잘못 가고있는 아이디어가 있습니까?

감사합니다,

+0

당신은 쉽게()'가 300x400의 흰색 캔버스에 이미지를 넣어'setImageExtent를 사용하여 다음 CENTER, 흰색의 배경 색상에 중력을 설정하고 찾을 수 있습니다. –

+0

'if ($ height> 390)'따옴표가 없습니다. –

답변

1

마크의 의견은 더 나은 옵션이 될 수 있습니다. Extent는 중력을 존중하고 최종 이미지가 항상 300x400이되도록합니다. Imagick::compositeImage을 사용하여 이미지를 중앙에 배치하려면 오프셋 값을 계산해야합니다.이 값은 이미 캔버스 이미지 인 & 캔버스 이미지의 너비/높이가 있으므로 쉽게 계산할 수 있습니다.

$canvas = new Imagick(); 
$finalWidth = 300; 
$finalHeight = 400; 
$canvas->newImage($finalWidth, $finalHeight, 'white', 'jpg'); 
$offsetX = (int)($finalWidth/2) - (int)($newWidth/2); 
$offsetY = (int)($finalHeight/2) - (int)($newHeight/2); 
$canvas->compositeImage($im, imagick::COMPOSITE_OVER, $offsetX, $offsetY);