使用ImageMagick或GD库将图像裁剪或遮盖成圆形的最佳方法是什么?(注意,解决方案存在于"其他"问答网站,但不存在StackOverflow)
我最近发现,与GD相比,Imagick可以支持颜色配置文件,从而产生质量更好的图像(有关更多详细信息,请参阅此问题/答案),所以我试图将我的GD包装器移植到使用Imagick类,而不是目前的GD实现如下:
function Image($input, $crop = null, $scale = null, $merge = null, $output = null, $sharp = true)
{
if (isset($input, $output) === true)
{
if (is_string($input) === true)
{
$input = @ImageCreateFromString(@file_get_contents($input));
}
if (is_resource($input) === true)
{
$size = array(ImageSX($input), ImageSY($input));
$crop = array_values(array_filter(explode('/', $crop), 'is_numeric'));
$scale = array_values(array_filter(explode('*', $scale), 'is_numeric'));
if (count($crop) == 2)
{
$crop = array($size[0] / $size[1], $crop[0] / $crop[1]);
if ($crop[0] > $crop[1])
{
$size[0] = round($size[1] * $crop[1]); …Run Code Online (Sandbox Code Playgroud) 我在Lion上使用Homebrew安装了Imagemagick,一切都很好,除了它从php调用时根本不起作用.安慰:
$ convert -version
Version: ImageMagick 6.7.1-1 2011-07-29 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features: OpenMP
$ which convert
/usr/local/bin/convert
Run Code Online (Sandbox Code Playgroud)
PHP:
echo exec ('convert -version');
Run Code Online (Sandbox Code Playgroud)
或者exec('convert -version',$ output); 的var_dump($输出);
什么都不产生(或空数组).
exec ('/usr/local/bin/convert') // works, but
exec ('which convert') // doesn't
Run Code Online (Sandbox Code Playgroud)
我需要在本地测试它,以确保我可以检测生产环境中的转换.但我无法正确测试它.PATH已设置,它可以在终端中运行,但不能在PHP中运行.
解决:
事实证明,对于php应该工作convert,/usr/bin/所以这解决了它:
ln -s /usr/local/bin/convert /usr/bin/convert
Run Code Online (Sandbox Code Playgroud)
更新
这是因为MAMP,这是修复:http://firedevcom.tumblr.com/post/22791937644/fix-for-homebrew-imagemagick-and-mamp
打开/ Applications/MAMP/Library/bin/envvars
并注释掉以下几行:
DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)
完成.
我有一段代码在我的Rails应用程序中在图像上绘制文本,并且从很久以前,可能不得不升级到OS X Yosemite,它在本地计算机上读取字体时遇到问题(生产服务器是工作正常).
我可以将它减少到这个例子:
require 'rvg/rvg'
font = '"/Users/xxxxxxxx/xxxx/app/assets/fonts/PTSans-Regular.ttf"'
rvg = Magick::RVG.new(100,100) do |canvas|
canvas.text(0, 0, 'my text').styles(font: font)
end
rvg.draw
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
Magick::ImageMagickError: unable to read font `"/Users/xxxxxxxx/xxxx/app/assets/fonts/PTSans-Regular.ttf"' @ error/annotate.c/RenderFreetype/1153: `(null)'
from /Users/xxxxxxxx/.rvm/gems/ruby-2.0.0-p353@xxxxxxxx/gems/rmagick-2.13.2/lib/rvg/misc.rb:322:in `get_type_metrics'
Run Code Online (Sandbox Code Playgroud)
我尝试重新安装imagemagick和rmagick gem,也使用这些标志:
brew install imagemagick --disable-openmp --build-from-source
Run Code Online (Sandbox Code Playgroud)
另外,如果我改变了
font = "/Users/xxxxxx/xxxxx/app/assets/fonts/PTSans-Regular.ttf"
Run Code Online (Sandbox Code Playgroud)
我认为额外的报价可能会妨碍我
Magick::ImageMagickError: non-conforming drawing primitive definition `Users/xxxxx/xxxx/app/assets/fonts/PTSans-Regular.ttf' @ error/draw.c/DrawImage/3170
from /Users/xxxxxxx/.rvm/gems/ruby-2.0.0-p353@xxxx/gems/rmagick-2.13.2/lib/rvg/misc.rb:546:in `draw'
Run Code Online (Sandbox Code Playgroud)
我还尝试从http://xquartz.macosforge.org/landing/安装最新版本的XQuartz
我正在使用convert命令来调整图像大小
有两个版本
以下是第一个,结果图像保持纵横比,但图像不一定是大小 nxn
convert temp.jpg -resize nxn temp.jpg
Run Code Online (Sandbox Code Playgroud)
第二个版本
convert temp.jpg -resize nxn! temp.jpg
Run Code Online (Sandbox Code Playgroud)
它不保留纵横比.
我想要的是保留纵横比,并用所需的RGB值填充图像的其余部分以实现尺寸 nxn
有任何想法吗?
谢谢
目前,我已经克隆了一个项目。我在 Ubuntu 14.04 64 位上有 PHP 7。
使用以下命令安装 ImageMagick 库
sudo apt-get install php-imagick
Run Code Online (Sandbox Code Playgroud)
但是当我尝试通过这个库进行图像处理时,它会抛出以下异常
(1/1) NotSupportedException
ImageMagick module not available with this PHP installation.
Run Code Online (Sandbox Code Playgroud)
如何使用最新的 PHP 版本安装此软件?
注意:我在这个项目中使用 Laravel 5.4。
鉴于用户上传的图像,我需要创建它的各种缩略图,以便在网站上显示.我正在使用ImageMagick并试图让Google PageSpeed感到高兴.不幸的是,无论quality我在convert命令中指定了什么值,PageSpeed仍然能够建议进一步压缩图像.
对于JPEG ...图像格式,质量为1 [提供]最低图像质量和最高压缩....
我实际上甚至测试过使用1来压缩图像(虽然它产生了无法使用的图像),而PageSpeed仍然建议我仍然可以通过"无损压缩"图像来优化这种图像.我不知道如何使用ImageMagick压缩图像.有什么建议?
这是测试我所说的内容的快速方法:
assert_options(ASSERT_BAIL, TRUE);
// TODO: specify valid image here
$input_filename = 'Dock.jpg';
assert(file_exists($input_filename));
$qualities = array('100', '75', '50', '25', '1');
$geometries = array('100x100', '250x250', '400x400');
foreach($qualities as $quality)
{
echo("<h1>$quality</h1>");
foreach ($geometries as $geometry)
{
$output_filename = "$geometry-$quality.jpg";
$command = "convert -units PixelsPerInch -density 72x72 -quality $quality -resize $geometry $input_filename $output_filename";
$output = array();
$return = 0;
exec($command, $output, $return);
echo('<img src="' . $output_filename . '" …Run Code Online (Sandbox Code Playgroud) 我们可以使用java,imagemagick或jmagick找到图像中哪种颜色占主导地位?
对于一个项目,我试图创建一个图像的透视扭曲,以匹配DVD案例前端模板.所以我想使用ImageMagick(CLI)自动执行此操作,但我很难理解这种转换的数学方面.
convert \
-verbose mw2.png \
-alpha set \
-virtual-pixel transparent \
-distort Perspective-Projection '0,0 0,0 0,0 0,0' \
box.png
Run Code Online (Sandbox Code Playgroud)
这段代码是空的坐标集,我已经彻底阅读了文档,但我似乎无法理解什么参数代表什么点.文档给了我变量和名称,我不知道它们实际意味着什么(对数学策划者来说更有用).因此,如果有人可以解释我(视觉上优先,或给我一个有用信息的链接),因为我不清楚我在做什么.只是玩这些工作的参数,我需要计算这些点.
在这里,您将找到我想要实现的目标的简单图像(使用CLI工具):
输入示例图像http://img707.imageshack.us/img707/5419/objecttoachieve.jpg
更新:
convert \
-virtual-pixel transparent \
-size 159x92 \
-verbose \
cd_empty.png \
\(mw2.png -distort Perspective '7,40 4,30 4,124 4,123 85,122 100,123 85,2 100,30'\) \
-geometry +3+20 \
-composite cover-after.png
Run Code Online (Sandbox Code Playgroud)
给我输出:
cd_empty.png PNG 92x159 92x159+0+0 8-bit sRGB 16.1KB 0.000u 0:00.000
convert: unable to open image `(mw2.png': No such file or directory @ error/blob.c/OpenBlob/2641.
convert: unable to open …Run Code Online (Sandbox Code Playgroud) 我有一个批处理脚本,可以将我的PNG-24(带透明度)图像转换为50%和25%的大小(用于移动开发).通常这些图像中有颜色,但现在我试图转换没有颜色的图像,ImageMagick不断将颜色空间配置文件更改为"灰色",这会在我正在使用的3d引擎(Unity)中弄乱我的图像.
我试图强制它使用TrueColor类型,色彩空间sRGB和sRGB.icc配置文件(OSX附带的配置文件)但它似乎并不关心.它仍然将其更改为格雷.
> convert old.png -profile srgb.icc -colorspace sRGB -type TrueColor new.png
> identify *.png
old.png PNG 140x140 140x140+0+0 8-bit sRGB 3.68KB 0.000u 0:00.000
new.png PNG 140x140 140x140+0+0 8-bit sRGB 256c 2.33KB 0.000u 0:00.000
Run Code Online (Sandbox Code Playgroud)
ImageMagick仍然将其识别为8位sRGB图像,但它在它之后放置"256c",我假设它意味着它已将它减少到256色,我也不想要.当我在OSX Preview.app中查看图像时,它表示它正在使用灰色配置文件.图像在视觉上看起来也有很多不同.
这是我正在使用的图像:https://dl.dropbox.com/u/59304/old.png
这里有一个重复的问题,ImageMagick将Colorspace缩小为灰色,但答案对我不起作用,遗憾的是我没有足够的声誉评论他的答案.我想我的情况有所不同,因为我使用的是PNG,而不是JPG.
Version: ImageMagick 6.8.0-7 2013-01-02 Q16 http://www.imagemagick.org
Features: OpenCL
Run Code Online (Sandbox Code Playgroud)
编辑 - 在阅读其中一个答案中指定的ImageMagick论坛后,看起来只是将PNG32:或PNG24:添加到输出文件中解决了问题.
imagemagick ×10
php ×4
gd ×2
image ×2
color-space ×1
compression ×1
fonts ×1
homebrew ×1
imagick ×1
java ×1
jmagick ×1
jpeg ×1
laravel-5 ×1
linux ×1
mamp ×1
osx-lion ×1
pagespeed ×1
perspective ×1
rmagick ×1
ruby ×1