PHP Conference Japan 2024

Imagick::setOption

(PECL imagick 2, PECL imagick 3)

Imagick::setOption設定選項

描述

public Imagick::setOption(string $key, string $value): bool

將一個或多個選項與魔杖關聯。

參數

key

value

傳回值

成功時傳回 true

範例

範例 #1 嘗試達到 '$extent' 大小Imagick::setOption()

<?php
function renderJPG($extent) {
$imagePath = $this->control->getImagePath();
$imagick = new \Imagick(realpath($imagePath));
$imagick->setImageFormat('jpg');
$imagick->setOption('jpeg:extent', $extent);
header("Content-Type: image/jpg");
echo
$imagick->getImageBlob();
}

?>

範例 #2 Imagick::setOption()

<?php
function renderPNG($imagePath, $format) {

$imagick = new \Imagick(realpath($imagePath));
$imagick->setImageFormat('png');
$imagick->setOption('png:format', $format);
header("Content-Type: image/png");
echo
$imagick->getImageBlob();
}

// 另存為 64 位元 PNG。
renderPNG($imagePath, 'png64');

?>

範例 #3 Imagick::setOption()

<?php
function renderCustomBitDepthPNG() {
$imagePath = $this->control->getImagePath();
$imagick = new \Imagick(realpath($imagePath));
$imagick->setImageFormat('png');

$imagick->setOption('png:bit-depth', '16');
$imagick->setOption('png:color-type', 6);
header("Content-Type: image/png");
$crash = true;
if (
$crash) {
echo
$imagick->getImageBlob();
}
else {
$tempFilename = tempnam('./', 'imagick');
$imagick->writeimage(realpath($tempFilename));
echo
file_get_contents($tempFilename);
}
}

?>

新增註解

使用者貢獻的註解 4 則註解

7
kicha at kreker dot org
9 年前
官方 imagemagick 網站上的選項列表 (以 key => value 形式)
https://imagemagick.dev.org.tw/script/command-line-options.php#define
3
alexandre at gaigalas dot net
13 年前
如果您想從 PDF 檔案中擷取預覽,使用 CropBox 而不是整個文件,setOption() 是正確的方法

<?php
$handler
= new Imagick();
$handler->setOption('pdf:use-cropbox', 'true');
$handler->readImage($imageFileName);
$handler->thumbnailImage(200, 200, true);
$handler->setImageFormat('jpeg');
$handler->writeImage($destThumbFileName);
?>

這等同於 convert 命令列工具的 -define pdf:use-cropbox=true。pdf:use-trimbox 也可以使用。

請注意,在我的環境中,只有在呼叫 readImage 方法之前呼叫 setOption 時,該方法才有效,這表示您不能直接將檔名傳遞給 Imagick 建構子。
1
SkepticaLee
4 年前
實際上,如果 setOption() 失敗,可以使用 setImageArtifact(),例如:

$im->setImageartifact ("distort:viewport", "960x540+0-151");

或者,也許 setOption() 已被棄用。
0
dodginess at yahoo dot com
7 個月前
似乎無法像預期那樣使用 setOption() 方法停用反鋸齒,並且像這樣呼叫 setOption() 方法不會有任何作用。

$imagick->setOption('antialias', FALSE);

https://github.com/Imagick/imagick/issues/83 中所述,正確的做法似乎是使用 setAntiAlias() 方法,該方法目前未在 PHP 手冊中記錄。例如,要停用影像的反鋸齒,您可以這樣做:

$imagick->setAntiAlias(FALSE);
To Top