此函数的参数确实令人费解。高斯半径和高斯标准差?试用了一段时间后,我认为我理解了。高斯是“笔刷”(用Gimp/Photoshop的行话),半径只是笔刷的半径,标准差是笔刷印记大小的变化程度。$radius参数可以是0到任何你能想到的大数,但是一旦你超过10、20或30像素(取决于图像大小),整个图像就会模糊到无法使用的程度。$sigma作为标准差,应该小于你的半径才能获得理想的效果。可以把它理解为“$radius像素大小的炭笔笔刷,每个笔刷比$radius像素大或小$sigma像素”。
对于一张平均500 x 500像素的图像,你可能需要一个3到5的$radius和一个1到3的$sigma,但是在你使图像模糊到无法辨认之前,你通常可以达到10像素。(目前,对于我正在处理的这张400x400的图像,$radius: 5 / $sigma: 2 是完美的融合。)
这个项目的官方文档网站也没有太多帮助: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);
?>