将圆角添加到 jpeg 文件

Posted

技术标签:

【中文标题】将圆角添加到 jpeg 文件【英文标题】:Add round corners to a jpeg file 【发布时间】:2012-11-14 18:44:55 【问题描述】:

我正在尝试向 jpeg 文件添加圆角,但问题是添加圆角后,我得到了黑色背景色。不知何故,我无法将其更改为任何其他颜色(白色、透明、红色)。它只是简单地显示图像有圆角的黑色背景。

我使用的代码是:

<?php

    $image = new Imagick('example.jpg');
    $image->setBackgroundColor("red");
    $image->setImageFormat("jpg");
    $image->roundCorners(575,575);
    $image->writeImage("rounded.jpg");
    header('Content-type: image/jpeg');
    echo $image;

?>

我不能使用 png,因为 jpeg 文件很大,大约 5 MB,所以如果我使用 png,文件大小将达到 26 MB,即使 png 添加了透明圆角。

我使用的 IMagick 版本是:

ImageMagick 6.6.2-10 2010-06-29 Q16 http://www.imagemagick.org 

输出(生成的图像)​​也会被打印出来,所以我不知道 css 是否可以在这里工作。

对不起,我正在尝试从现有的没有圆角的 jpeg 文件创建一个带有圆角的新 jpeg 文件,这实际上是从相机拍摄的照片,所以有多种/太多颜色所以我也不能使用 gif。

此外,我的网站只会生成圆角图像,然后由网站管理员使用 FTP 程序下载,然后使用系统软件打印,所以简而言之,我的网站不会打印图像,而只是生成它

【问题讨论】:

实际文件大小应该不是问题。如果 PNG 适合您,那么请使用 PNGS,因为您内置了透明度。 问题是,如果我使用 png,那么不仅文件大小会增加,而且执行时间也会增加 Jpeg 为 5 秒,PNG 为 80 秒 那么你需要更多的内存! :) 你能在你的电脑上测试上面的代码吗,因为即使是 Photoshop 也需要很长时间才能将 5 mb 大小的 jpeg 文件转换和保存为 png 文件。我还有 3 GB RAM。文件分辨率为5200x3200 我没有相同的设置来测试。 【参考方案1】:

试试这个:

<?php 
$input = 'example.jpg';
$size = getimagesize($input);
$background = new Imagick();
$background->newImage($size[0], $size[1], new ImagickPixel('red'));
$image = new Imagick($input);
$image->setImageFormat("png");
$image->roundCorners(575,575);
$image->compositeImage($background, imagick::COMPOSITE_DSTATOP, 0, 0);
$image->writeImage("rounded.jpg");
?>

【讨论】:

非常感谢我终于能够更改 jpg 文件中的黑色背景【参考方案2】:

我可能会被否决,但我说让 css 处理角落并减轻你的服务器的负载:)

CSS rounded corners.

【讨论】:

输出将被打印,所以我不知道 css 是否可以在这里工作 您正在从文件系统中提取图像,添加圆角并提供它。多么浪费资源。 我刚刚意识到我的 iPad 上没有反引号键在跳转远程桌面...哈 哈,所以现在我们必须在他们提出带有附加代码块的特定问题时读懂他们的想法? :) 使用打印样式表,当您在页面上包含 css 时,它与 media="print" 一起使用。 @Aditya - 在这种情况下,此解决方案将不起作用。您的示例中有 header('Content-type: image/jpeg'); echo $image; 行,这使得您的图像看起来像是通过 HTTP 提供给可以应用 CSS 的网页。如果不是这样,那么 CSS 不是一个选项。【参考方案3】:

JPG 在其调色板中没有透明颜色(Alpha 通道)。

输出图像必须使用 PNG 或 GIF(或其他支持 Alpha 通道的图像格式)。

setImageBackgroundColor 是另一种选择,如果您想要不透明的背景。


编辑

您的评论提醒我可以尝试使用命令行; shell_exec() 将从 PHP 运行命令行参数。您需要开始使用 ImageMagick API 中的命令是 convert example.jpg,然后您可以使用所需的各种参数传递标志。

由于 ImageMagick 已经安装,它可以立即运行。您可能需要将系统 PATH 指向所有可执行文件所在的 ImageMagick 目录。

有很多问题和论坛专门针对这种方法的圆角,所以我将把它留给你。

这里有一个有用的提示 - convert 命令有一个愚蠢的混淆,因为 Windows 也有一个很少使用的 convert.exe,但会混淆你的命令行,所以请确保你调用的是正确的convert。 ;) 要测试它是否正常工作,请尝试 convert example.jpg example.gif(它应该将您的示例转换为 gif)。

要从命令行获取输出,请使用2&gt;&amp;1 完成所有命令,这将通过管道cmd output back into PHP。

【讨论】:

透明不是我的目标,我只需要更改显示为背景的黑色 我试过“setImageBackgroundColor”,即使那样它也不起作用我也试过 $image->setBackgroundColor(new ImagickPixel("red")); $image->setBackgroundColor("红色"); $image->setImageBackgroundColor("红色");一次一个,但它们似乎都不起作用 我曾经读过有人写道你需要添加 -alpha off:- “添加这个可以防止 JPG 被创建为黑色背景” 但它没有说明我想的确切位置或方式将其添加到我的 php 脚本中

以上是关于将圆角添加到 jpeg 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将圆角添加到 UIBezierPath 自定义矩形?

如何将文本添加到由圆分隔的圆角矩形中

将圆角添加到一组div

PHP:将透明 PNG 添加到具有不透明度的 JPEG

向 UICollectionViewCell 添加圆角和阴影

为所有 UIImageViews 添加圆角