- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一张透明背景的图片,我想用 5 像素的边框勾勒出轮廓。在 photoshop 中,我可以通过描边来实现这一点。
我试过使用 borderImage
但它不会勾勒出企鹅的轮廓。
$image = new Imagick();
$image->readImage('tux.png');
$image->borderImage(new ImagickPixel('red'), 5, 5); // no outline
这是图片。
这就是我想要实现的。
最佳答案
我将从命令行开始,稍后可能会执行 PHP,或者让您完成那一点...
第 1 步 - 提取透明度
如您所见,-border
勾勒出整个 图像,但实际上您只想勾勒出不透明 区域,因此您需要使用透明度或 alpha 层。让我们先提取它:
convert tux.png -alpha extract alpha.png
第 2 步 - 获取不透明区域的边缘
现在,你想要轮廓的边缘,所以我将使用 -morphology
:
convert alpha.png -morphology edge octagon -threshold 50% edge.png
我听说人们在 PHP 中进行形态学操作时遇到困难,所以这里有一个不使用形态学的替代方法。基本上,它复制 alpha 层,然后使用统计数据找到每个 3x3 框中最亮的像素(这只会在 3x3 框中有一些黑色和一些白色像素的边缘产生影响)然后差异原始结果显示受影响的像素。做比描述更容易!
convert alpha.png \( +clone -statistic maximum 3x3 -threshold 50% \) -compose difference -composite edge.png
使用 5x5 的框来获得较粗的线条。
我看到有一个 -edge 5
选项,它更简单 - 我们生活和学习!
第 3 步 - 将边缘设为红色并保持透明
现在你想让白色变成红色,黑色变成透明:
convert edge.png -fill red -opaque white -transparent black rededge.png
第 4 步 - 在原件上合成红色轮廓
最后,您想将其合成到您的原件上:
convert tux.png rededge.png -composite result.png
整头 pig
或者,您可以像这样一次完成所有操作:
convert tux.png \( +clone -alpha extract -morphology edge octagon -threshold 50% -fill red -opaque white -transparent black \) -composite result.png
您可能更喜欢 -morphology edgeout
比 -morphology edge
更微妙的效果。
PHP 版本
我的 PHP 技能“低”,但我已经开始并且正在取得一些进步 - 稍后会更新,但到目前为止它看起来像这样:
$image = new Imagick("tux.png");
$alpha = clone $image;
$alpha->separateImageChannel(Imagick::CHANNEL_ALPHA);
$alpha->negateImage(true);
$alpha->edgeImage(5);
$alpha->opaquePaintImage("white","red",65000,FALSE);
$alpha->transparentPaintImage("black",0.0,0,FALSE);
$image->compositeImage($alpha,Imagick::COMPOSITE_DEFAULT,0,0);
$image->writeImage("result.png");
这似乎很有用,但有些方面可能需要整理 - 特别是 65000
魔数(Magic Number),也许还有一些不必要的克隆和其他东西 - 我会把它留给你!
关于php - 使用 imagick PHP 绘制透明图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33888028/
我想把一张图片转成只有黑白两种颜色的GIF格式 因此输出图像中的每个像素都将是黑色或白色 有人知道在 imagick 中进行转换的方法吗? 最佳答案 虽然写出双色 gif 的最终转换是相同的,但将图像
我在 Imagick 中设置图像的重力时遇到了一些真正的困难。 我已经成功地设置了 ImaickDraw 对象的引力,但是我没有成功地在 Imagick 对象中设置它。 下面是我当时正在使用的基本代码
resizeImage 和 scaleImage 有什么区别? 如果图像的大小大于 $myLimit,我需要调整图像的大小 示例(伪代码): $myLimit = 1MB user uplaod an
我在为 laravel 安装 devisephp 时遇到了问题。我正在使用 php7 开发最新版本的宅基地。当我进行 Composer 更新时,出现以下错误。 Problem 1 - Inst
我正在使用以下代码在另一个图像上屏蔽一个图像。在输出时,它给了我一个黑色背景的图像。 但我需要白色背景或透明背景。 以下是我用来将一个图像屏蔽在另一个图像上的代码。 resizeImage(274,
我想在具有特定宽度、高度和顶部位置的 Imagick 对象中使一个区域透明。 例如,我需要一个从第 15 像素到顶部的 30px x 30px 的透明区域,但我找不到实现它的方法。 $canvas1
我需要能够在图像内自动写入一些文本。根据图像亮度,脚本必须用白色或黑色书写。 那么如何使用 Imagick 检查图像的亮度/暗度? 最佳答案 你可以这样做: // Load the image $im
我刚刚开始使用 PHP 的 Imageick 库。 我首先裁剪用户图像,如下所示: $img_path = 'image.jpg'; $img = new Imagick($img_path); $i
我需要能够在图像内自动写入一些文本。根据图像亮度,脚本必须用白色或黑色书写。 那么如何使用 Imagick 检查图像的亮度/暗度? 最佳答案 你可以这样做: // Load the image $im
我对 iMagick 还很陌生,只找到了非常有限的 PHP 库文档。我很乐意调整图像大小并将它们写回硬盘驱动器,但我完全无法使用 JPG 等方式压缩图像。 这是我目前使用的代码: function s
我正在用js操作图像,我想保存这些转换后的图像。我正在使用 ajax 发布此数据: image : canvas.toDataURL('image/jpeg') 通过这种方式,我获得了图像的 base
简单调用 Imagick 类时: $image = new Imagick('/images/magick/atmsk.png'); 我收到错误信息: Fatal error: Uncaught ex
如何有效地压缩 PNG?就我而言,图像是具有透明度的小灰度图像。 目前我正在玩这个: // ... $im->setImageFormat('png'); $im->setImageColorspac
我正在尝试使用 Imagick 编辑图像,但出现如下异常: ImagickException: UnableToLoadModule `C:\xampp\apache\bin\IM_MOD_RL_J
我使用下面的代码来创建宝丽来效果,但它真的很分散注意力,周围没有任何透明效果。 polaroidImage(new ImagickDraw(), 25); /* output the image */
我必须在 PHP CLI 上用 Imagick 渲染一些东西。我注意到服务器内存每隔 3-5 天就会变满,所以我什至无法通过 ssh 或 ftp 连接。 我使用 memory_get_usage()
我希望能够使用 Imagick PHP 扩展检测图像是否透明。 到目前为止,我唯一的幸运就是运行 exec()/其他一些命令,并使用 ImageMagick 命令行工具来实现它。这就是我的意思: ex
我已经安装了 imagick php 模块,还使用 Brew 安装了 Image Magick。安装并添加到 php.ini 中的扩展后,我在 Apache (XAMPP) 启动时收到此错误。 d
我刚刚开始使用 Imagick/ImageMagick 库编写一些 PHP,并且看到了几个关于 setImageCompression 的示例,它们似乎以不同的方式实现了一些东西。 例如我看到它是这样
我有两张图片(第一个和第二个链接)。 First image Second image Third image 第三张图片由 imagick 生成,代码: $image1 = new \imagick
我是一名优秀的程序员,十分优秀!