PHP Conference Japan 2024

Imagick::scaleImage

(PECL imagick 2, PECL imagick 3)

Imagick::scaleImage調整影像尺寸

描述

public Imagick::scaleImage(
    int $columns,
    int $rows,
    bool $bestfit = false,
    bool $legacy = false
): bool

將影像的尺寸調整為給定的尺寸。如果任一參數傳遞 0,則會計算另一個參數。

注意 參數 bestfit 的行為在 Imagick 3.0.0 中有所變更。在此版本之前,給定尺寸為 400x400,而尺寸為 200x150 的影像將保持不變。在 Imagick 3.0.0 及更新版本中,影像會縮放到 400x300 的大小,因為這是給定尺寸的「最佳擬合」。如果使用 bestfit 參數,則必須同時給定寬度和高度。

參數

columns

rows

bestfit

回傳值

成功時回傳 true

錯誤/例外

發生錯誤時拋出 ImagickException。

變更記錄

版本 描述
PECL imagick 2.1.0 新增可選的 fit 參數。此方法現在支援比例縮放。傳遞零作為任一參數進行比例縮放。

範例

範例 1 Imagick::scaleImage()

<?php
function scaleImage($imagePath) {
$imagick = new \Imagick(realpath($imagePath));
$imagick->scaleImage(150, 150, true);
header("Content-Type: image/jpg");
echo
$imagick->getImageBlob();
}

?>

新增註解

使用者貢獻的註解 5 個註解

28
benford at bluhelix dot com
15 年前
如果有人覺得「如果任一參數傳遞 0,則會計算另一個參數」有點令人困惑,它的意思大致如下

<?php
$im
= new Imagick('example.jpg');
$im->scaleImage(300, 0);
?>

這會縮放影像,使其現在寬 300 像素,並自動計算高度以保持影像相同的長寬比。

<?php
$im
= new Imagick('example.jpg');
$im->scaleImage(0, 300);
?>

同樣地,此範例會縮放影像,使其高 300 像素,並且該方法會自動重新計算影像的高度以維持長寬比。
9
vincent dot hoen at gmail dot com
17 年前
這是調整動畫 GIF 大小的簡單方法

$picture = new Imagick('animated_gif.gif');

foreach($picture as $frame){
$frame->scaleImage($width, $height);
}
7
octave at web dot de
15 年前
當使用「fit = true」選項時,影像只會縮小,但永遠不會放大

<?php
$im
= new Imagick('1600x1200.jpg');

$im->scaleImage(2000, 1500, true); // => 1600x1200

$im->scaleImage(1000, 500, true); // => 666x500
?>
3
agamemnus at flyingsoft dot pw
10 年前
警告:這可能會以意想不到的方式模糊您的邊緣。為了更好地控制,請改用 resizeImage。
5
clickconvert at gmail dot com
12 年前
需要調整直向和橫向影像的大小(並轉換為 72ppi)嗎?這些影像將適合 800x600 的區域,而不會失真,無論高度或寬度如何。

<?php
$img
= new Imagick($img_loc.$file);
$img->setImageResolution(72,72);
$img->resampleImage(72,72,imagick::FILTER_UNDEFINED,1);
$img->scaleImage(800,0);
$d = $img->getImageGeometry();
$h = $d['height'];
if(
$h > 600) {
$img->scaleImage(0,600);
$img->writeImage($resized_loc.$file);
} else {
$img->writeImage($resized_loc.$file);
}
$img->destroy();
?>
To Top