2012-10-11 49 views
0

爲什麼不能正常工作?PHP Imagick:將圖像對象複製到另一個圖像對象,但分辨率較高

var_dump($Obj_old_image->getImageResolution()); 
//array(2) { ["x"]=> float(72) ["y"]=> float(72) } 

$Obj_new_image->setResolution(200, 200); 

var_dump($Obj_new_image->getImageResolution()); 
//array(2) { ["x"]=> float(200) ["y"]=> float(200) } 

$Obj_new_image->setImage($Obj_old_image); 

$Obj_new_image->setImageFormat("png"); 
header("Content-Type: image/png"); 
echo $Obj_new_image; 

它返回相同的分辨率。

這是應該調整SVG圖像的大小而不會丟失質量。

+0

可能重複? http://stackoverflow.com/questions/10383305/how-to-resize-an-svg-with-imagick-imagemagick – Mike

+0

沒有它的不重複,忘記SVG 我需要從一個imagick對象加載圖像到另一個更大的尺寸imagick對象。 非常像你從JPEG文件加載圖像到imagick對象,並調整它的大小。 –

回答

0

我不知道什麼$Obj_old_image是或它在做什麼根據您的發佈代碼。不過下面的代碼將使用PHP和安裝標準GD庫工作:

// image to be scaled 
$rawImgPath = './test.jpg'; 

// new image size (guessing you know the new size) 
$newImgSize['w'] = 200; 
$newImgSize['h'] = 200; 

// the steps to create the new scaled image 
$rawImg = imagecreatefromjpeg($rawImgPath); 
$newImg = imagecreatetruecolor($newImgSize['w'], $newImgSize['h']); 

// need to know the current width and height of the source image 
list($rawImgSize['w'], $rawImgSize['h']) = getimagesize($rawImgPath); 

// resize the iamge 
imagecopyresampled($newImg,$rawImg, 0,0,0,0, 
    $newImgSize['w'],$newImgSize['h'],$rawImgSize['w'],$rawImgSize['h']); 

// no longer need the original 
imagedestroy($rawImg); 

// display scaled image 
header('Content-Type: image/png'); 
imagepng($newImg); 

// no longer need the scaled image 
imagedestroy($newImg); 

而且此代碼應工作,並提供更好的結果,但不適合我。基本上,imagescale()是PHP網站上的新代碼並且是not well document

// image to be scaled 
$rawImgPath = './test.jpg'; 

// new image size (guessing you know the new size) 
$newImgSize['w'] = 200; 
$newImgSize['h'] = 200; 

// the steps to create the new scaled image 
$rawImg = imagecreatefromjpeg($rawImgPath); 
$newImg = imagescale($rawImg, $newImgSize['w'], $newImgSize['h'], 
    IMG_BICUBIC_FIXED); 

// no longer need the original 
imagedestroy($rawImg); 

// display scaled image 
header('Content-Type: image/png'); 
imagepng($newImg); 

// no longer need the scaled image 
imagedestroy($newImg); 
0

只需使用PHP的本地clone keyword即可複製Imagick實例。

$smallImg = new Imagick('small.png') 
$newImg = clone $smallImg; 

$newImg->resizeImage(200, 200, Imagick::FILTER_LANCZOS, 1, true); 

$newImg->setImageFormat("png"); 
header("Content-Type: image/png"); 
echo $newImg; 

bestfit參數resizeImage(最後布爾)需要擴大規模。沒有這些,Imagick只會縮小比例,保持較小的圖像不變。

Imagick::resizeImage docs的評論比較了各種調整大小過濾器的速度。我在Lanczos取得了不錯的成績。

相關問題