标签: imagemagick

为什么Ruby open-uri打开在我的单元测试中返回一个StringIO,但在我的控制器中是一个FileIO?

我继承了一个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此对象上的方法返回nilMiniMagick::Image.from_file爆炸.

当从该调用这个相同的模型方法时PhotosController,open(self.public_filename)返回FileIO绑定到例如名为的文件的实例,/tmp/open-uri7378-0并且该文件包含图像数据.

考虑原因必须是测试和开发之间的一些环境差异,我在开发环境下启动了控制台.但正如在单元测试中,open('http://...')返回一个StringIO,而不是一个FileIO.

我已经通过open-uri和所有相关的应用程序特定代码进行了跟踪,并且没有找到差异的理由.

ruby open-uri ruby-on-rails imagemagick amazon-s3

30
推荐指数
2
解决办法
8478
查看次数

如何将给定文件夹中的所有文件(格式不同)转换为不同的文件类型

我有一个包含许多不同类型图像的文件夹(png,jpg,jpeg,bmp,pdf),我想使用imagemagick将它们全部转换为png(例如).

是否有一个命令可以执行此操作?如果没有,我该怎么办呢?

谢谢.

imagemagick imagemagick-convert

30
推荐指数
3
解决办法
3万
查看次数

如何在Windows中的xampp/wampp中安装imagick

今天我尝试imagick在我的xampp中安装了数百次.我做到了.如果您遇到麻烦,请尝试按照以下步骤操作:

  1. 由于xampp是x86,请检查您的Image Magick(程序)是否为x86.如果没有, 请在这里下载最新版本:imagemagick.org/script/binary-releases.php#windows请记住你必须下载Win32 dynamic at 16 bits-per-pixel.
  2. 安装Image Magick at C:\imagemagick.
  3. 这里下载最新稳定版的imagick : . 你必须下载5.x Thread Safe (TS) x86.5.x中的x是PHP的版本.
  4. 放入php_imagick.dllxampp安装的php/ext文件夹.
  5. 在php.ini中添加: extension=php_imagick.dll
  6. 这是我遇到很多麻烦的时候.如果您尝试启动服务器(或php在控制台中写入(start-> cmd)),则会出现错误.如果这个错误说的是这样的话:Unable to find the entry point for the procedure FlattenImages in the DLL CORE_RL_magick.dll这意味着你正在顺利进行.
  7. 现在,您必须进入Image Magick的安装文件夹并覆盖您下载的DLL php_imagick.dll.所有这些都以前缀开头CORE_RL_.
  8. 一旦你覆盖了所有这些,你可以尝试php在Windows控制台中编写.如果不说某些东西意味着想象力是功能性的(你可以登记localhost/xampp/ > phpinfo() link.个人我必须安装一个新的DLL :.vcomp110.dll如果有人有比我更相同的错误(系统找不到vcomp11.dd),请在这里下载

现在,如果您尝试php在控制台上进行激活,或者只是初始化xampp的apache模块,那么您应该没有错误.

再见,希望我能帮助别人.

编辑:当 …

php xampp imagemagick imagick

30
推荐指数
1
解决办法
3万
查看次数

如何将图像缓冲区数据传递给()GraphicsMagic中的gm

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()方法.

下面是我正在引用的链接,但在其中,图像路径用作输入.我想使用缓冲区数据作为输入.我怎样才能做到这一点?

使用Node.js和GraphicsMagick将四个图像拼接在一起

imagemagick node.js graphicsmagick

30
推荐指数
1
解决办法
4816
查看次数

使用PHP和ImageMagick将PDF转换为JPEG

我正在使用一个小脚本将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相同.

php pdf jpeg imagemagick

29
推荐指数
3
解决办法
7万
查看次数

使用单个命令将多页pdf转换为多个页面

我想有效地将​​多页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上运行.

imagemagick ghostscript imagemagick-convert

29
推荐指数
4
解决办法
2万
查看次数

转换SVG并将其调整为PNG

我正在尝试将SVG转换为PNG(或任何栅格格式)并同时调整大小.

我以为我会使用ImageMagick执行此任务,但它似乎在调整大小之前转换为栅格.

这导致图像质量差.

  • 有没有办法让ImageMagick在转换为栅格之前调整SVG的大小?

  • 或者是否有一些其他工具可用于在调整大小后以程序方式将SVG转换为栅格?

  • 或者,我可以使用其他工具吗?

目前我通过命令行使用ImageMagick:

convert file.svg -resize 100x100 file.png
Run Code Online (Sandbox Code Playgroud)

源图像"大小"未知,目标大小直到运行时才知道.

svg png imagemagick image-resizing

29
推荐指数
5
解决办法
2万
查看次数

如何使用imagemagick制作高质量的动画图像

我想从那些.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

29
推荐指数
1
解决办法
1万
查看次数

将预编译的二进制文件捆绑到电子应用程序中

有关如何将第三方预编译的二进制文件(如imagemagick)包含在电子应用程序中的解决方案吗?有node.js模块,但它们都是包装器或本机绑定到系统范围内安装的库.我想知道是否可以在分发中捆绑预编译的二进制文件.

imagemagick node.js electron

29
推荐指数
5
解决办法
8787
查看次数

如何在ImageMagick中用透明的图像替换白色背景颜色?

我有一个形象.jpg formatwhite background color.我想删除透明的白色背景颜色Imagemagick.我尝试了很多方法,但仍然无法删除白色背景.有人可以帮我解决这个问题.

imagemagick background-image background-color

28
推荐指数
4
解决办法
3万
查看次数