我继承了一个Rails 2.2.2应用程序,用于在Amazon S3上存储用户上传的图像.基于attachment_fu的Photo模型提供了一种rotate方法,用于open-uri从S3和MiniMagick中检索图像以执行旋转.
该rotate方法包含此行以检索用于MiniMagick的图像:
temp_image = MiniMagick::Image.from_file(open(self.public_filename).path)
Run Code Online (Sandbox Code Playgroud)
self.public_filename 返回类似的东西
http://s3.amazonaws.com/bucketname/photos/98/photo.jpg
Run Code Online (Sandbox Code Playgroud)
检索图像并旋转它在生产和开发中正在运行的应用程序中工作正常.但是,单元测试失败了
TypeError: can't convert nil into String
/Users/santry/Development/totspot/vendor/gems/mini_magick-1.2.3/lib/mini_magick.rb:34:in `initialize'
/Users/santry/Development/totspot/vendor/gems/mini_magick-1.2.3/lib/mini_magick.rb:34:in `open'
/Users/santry/Development/totspot/vendor/gems/mini_magick-1.2.3/lib/mini_magick.rb:34:in `from_file'
Run Code Online (Sandbox Code Playgroud)
原因是当在单元测试的上下文中调用模型方法时,open(self.public_filename)返回StringIO包含图像数据的对象.path此对象上的方法返回nil并MiniMagick::Image.from_file爆炸.
当从该调用这个相同的模型方法时PhotosController,open(self.public_filename)返回FileIO绑定到例如名为的文件的实例,/tmp/open-uri7378-0并且该文件包含图像数据.
考虑原因必须是测试和开发之间的一些环境差异,我在开发环境下启动了控制台.但正如在单元测试中,open('http://...')返回一个StringIO,而不是一个FileIO.
我已经通过open-uri和所有相关的应用程序特定代码进行了跟踪,并且没有找到差异的理由.
我有一个包含许多不同类型图像的文件夹(png,jpg,jpeg,bmp,pdf),我想使用imagemagick将它们全部转换为png(例如).
是否有一个命令可以执行此操作?如果没有,我该怎么办呢?
谢谢.
今天我尝试imagick在我的xampp中安装了数百次.我做到了.如果您遇到麻烦,请尝试按照以下步骤操作:
Win32 dynamic at 16 bits-per-pixel.C:\imagemagick.5.x Thread Safe (TS) x86.5.x中的x是PHP的版本.php_imagick.dllxampp安装的php/ext文件夹.extension=php_imagick.dllphp在控制台中写入(start-> cmd)),则会出现错误.如果这个错误说的是这样的话:Unable to find the entry point for the procedure FlattenImages in the DLL CORE_RL_magick.dll这意味着你正在顺利进行.php_imagick.dll.所有这些都以前缀开头CORE_RL_.php在Windows控制台中编写.如果不说某些东西意味着想象力是功能性的(你可以登记localhost/xampp/ > phpinfo() link.个人我必须安装一个新的DLL :.vcomp110.dll如果有人有比我更相同的错误(系统找不到vcomp11.dd),请在这里下载现在,如果您尝试php在控制台上进行激活,或者只是初始化xampp的apache模块,那么您应该没有错误.
再见,希望我能帮助别人.
编辑:当 …
var buf = require('fs').readFileSync('test.jpg');
gm().in('-page', '+0+0').in(buf,'test.jpg').write('output.jpg', function (err) {
if (err) console.log(err);
})
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我想将缓冲区数据作为输入传递给gm.in()方法.
下面是我正在引用的链接,但在其中,图像路径用作输入.我想使用缓冲区数据作为输入.我怎样才能做到这一点?
我正在使用一个小脚本将PDF转换为JPG.这有效但质量很差.
剧本:
$im = new imagick( 'document.pdf[ 0]' );
$im->setImageColorspace(255);
$im->setResolution(300, 300);
$im->setCompressionQuality(95);
$im->setImageFormat('jpeg');
$im->writeImage('thumb.jpg');
$im->clear();
$im->destroy();
Run Code Online (Sandbox Code Playgroud)
还有一件事,我希望保留PDF的原始大小,但转换的大小与JPG相同.
我想有效地将多页pdf转换为单页图像.
我已经知道如何使用imagemagick一次执行此页面.例如,
convert x.pdf[2] x3.jpg
Run Code Online (Sandbox Code Playgroud)
将给我作为图像的PDF格式的第3页.因此,如果我使用识别来确定 pdf中有多少页面,那么我可以循环并将pdf中的所有页面转换为图像.然而,这种方法可能需要一段时间.例如,15页的pdf可能需要15-30秒.
根据我在其他地方(也在imagemagick论坛上)看到的答案,以下imagemagick命令应该将pdf分成多个图像.
convert x.pdf x-%0d.jpg
Run Code Online (Sandbox Code Playgroud)
但所有这一切最终都是创建名为x-0.jpg的第一页
作为替代方案,我尝试使用具有突发功能的pdftk.我在那里遇到的问题是爆炸在所有情况下都不起作用.它适用于某些pdf,而不适用于其他一些.
关于如何改进事物的任何建议都会有所帮助.
我的操作系统是Mac OSX Lion,但我确实需要在CentOS 6上运行.
我正在尝试将SVG转换为PNG(或任何栅格格式)并同时调整大小.
我以为我会使用ImageMagick执行此任务,但它似乎在调整大小之前转换为栅格.
这导致图像质量差.
有没有办法让ImageMagick在转换为栅格之前调整SVG的大小?
或者是否有一些其他工具可用于在调整大小后以程序方式将SVG转换为栅格?
或者,我可以使用其他工具吗?
目前我通过命令行使用ImageMagick:
convert file.svg -resize 100x100 file.png
Run Code Online (Sandbox Code Playgroud)
源图像"大小"未知,目标大小直到运行时才知道.
我想从那些.png图像制作动画GIF:




我用这个命令做到了:
convert -layers OptimizePlus -delay 25x100 ps1-*.png -loop 0 ps1.gif
Run Code Online (Sandbox Code Playgroud)
它成功地制作了动画gif,但是输出的质量非常低,并且比输入图像小:

经过一番搜索,我得到了质量
convert -layers OptimizePlus -delay 25x100 -quality 99 ps1-*.png -loop 0 ps1.gif
Run Code Online (Sandbox Code Playgroud)
但似乎imagemagick只是忽略了参数.
有关如何将第三方预编译的二进制文件(如imagemagick)包含在电子应用程序中的解决方案吗?有node.js模块,但它们都是包装器或本机绑定到系统范围内安装的库.我想知道是否可以在分发中捆绑预编译的二进制文件.
我有一个形象.jpg format用white background color.我想删除透明的白色背景颜色Imagemagick.我尝试了很多方法,但仍然无法删除白色背景.有人可以帮我解决这个问题.