1

なぜこれが機能しないのですか?

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 画像のサイズを変更することになっています。

4

2 に答える 2

0

インスタンスを複製するには、PHP のネイティブcloneキーワードを使用するだけです。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;

スケールアップするには、(last boolean)へのbestfit引数が必要です。resizeImageそれがなければ、Imagick は縮小するだけで、小さい画像は変更されません。

Imagick::resizeImageドキュメントのコメントは、さまざまなサイズ変更フィルターの速度を比較しています。私はランチョスで良い結果を出しています。

于 2016-06-08T15:05:21.633 に答える
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 サイトで十分に文書化されていません。

// 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);
于 2013-06-04T06:45:59.340 に答える