Imagick::charcoalImage

(PECL imagick 2, PECL imagick 3)

Imagick::charcoalImage模拟炭笔画

描述

public Imagick::charcoalImage(float $radius, float $sigma): bool

模拟炭笔画。

参数

radius

高斯函数的半径,以像素为单位,不包括中心像素

sigma

高斯函数的标准差,以像素为单位

返回值

成功时返回 true

示例

示例 #1 Imagick::charcoalImage()

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

?>

添加注释

用户贡献注释 1 个注释

holdoffhunger at gmail dot com
12 年前
此函数的参数非常吓人。高斯函数的半径和标准差?玩了一会儿之后,我认为我理解了。高斯函数就是“画笔”(在 Gimp/Photoshop 中),半径只是画笔的半径,标准差是画笔印记尺寸变化的程度。$radius 参数可以是 0 到你能想到的任何大数字,但一旦你超过 10、20 或 30 像素(取决于图像大小),整个图像就会模糊到无法识别。$sigma 作为标准差,应该小于你的半径才能获得所需的效果。把它想象成“$radius 像素大小的炭笔画笔,每支画笔的大小比 $radius 大或小 $sigma 像素”。

对于一个平均 500 x 500 像素的图像,你可能想要 $radius 为 3 到 5,$sigma 为 1 到 3,但你通常可以一直使用到 10 像素,然后图像就会模糊到无法识别。(目前,$radius: 5 / $sigma: 2 是我现在正在处理的这个 400x400 图像的完美融合。)

官方文档网站对这个项目也没有太多帮助:https://imagemagick.org.cn/RMagick/doc/image1.html 。那里的作者指出:“你可以通过更改半径和 sigma 参数来改变效果的强度”。所以,我对这里功能的描述主要基于经验而不是文档,而文档很难找到。

以下是将效果应用于图像的完整代码。此代码将打开指定的文件,将 charcoalImage 效果应用于它,然后将它保存到另一个指定的文件。参数通过 POST 数据提供,ImageMagick 类的唯一使用到的函数是 readImageFile、charcoalImage 和 writeImageFile,如下所示

<?php

// 作者:[email protected]

// 获取传入数据 - 函数参数
// --------------------------------------------------

$inbound_gaussian_radius = $_POST['radius_of_gaussian'];
$inbound_standard_deviation = $_POST['standard_deviation_of_gaussian'];

// 获取传入数据 - 读取文件和写入文件
// --------------------------------------------------

$filename_for_function = $_POST['file_target'];
$inbound_save_as_filename = $_POST['saveable_result_file'];

// 获取图像文件数据
// ---------------------------------------------

$folder_location = "images/workshop/";
$file_to_grab_with_location = $folder_location . $filename_for_function;

$imagick_type = new Imagick();

// 打开文件
// ---------------------------------------------

$file_handle_for_viewing_image_file = fopen($file_to_grab_with_location, 'a+');

// 读取文件
// ---------------------------------------------

$imagick_type->readImageFile($file_handle_for_viewing_image_file);

// 执行函数
// ---------------------------------------------

$imagick_type->charcoalImage($inbound_gaussian_radius, $inbound_standard_deviation);

// 保存文件
// ---------------------------------------------

$folder_location = "images/workshop/";
$file_to_grab_with_location = $folder_location . $inbound_save_as_filename;

$file_handle_for_saving_image_file = fopen($file_to_grab_with_location, 'a+');

// 写入文件
// ---------------------------------------------

$imagick_type->writeImageFile($file_handle_for_saving_image_file);

?>
To Top