【问题标题】:Convert EPS to JPEG with Imagick使用 Imagick 将 EPS 转换为 JPEG
【发布时间】:2014-08-13 12:40:55
【问题描述】:

我有一个脚本,当前接受 JPEG 输入,将其保存到 DB,将其复制到文件夹,然后重定向。但是,有人告诉我,我们现在需要能够获取 EPS 文件并将它们转换为 JPEG,然后再发生其他任何事情。

这是我脚本的添加部分,似乎不起作用:

$filename = $_FILES['file']['name'];
$filedims = getimagesize($filename);
$imagick = new Imagick();
$imagick->newImage($filedims[0], $filedims[1], "white");
$imagick->compositeimage($filename, Imagick::COMPOSITE_OVER, 0, 0);
$imagick->setImageFormat("jpg");
$imagick->writeImage($filename);

Imagick Documentation,我看到compositeimage() 的第一个参数应该是一个“包含合成图像的Imagick 对象”,但我不确定我的$filename此时是?

当谈到面向对象的 PHP 和 -> 选择器时,我完全不知所措,但希望这里有人可以帮助我找出问题所在。

遇到的错误

Warning: getimagesize(fast-track_logo_text.eps): failed to open stream: No such file or directory in /example.com/upload-company-logo.php on line 36

如果getimagesize() 不起作用,您如何获得 EPS 文件的尺寸?!它是必需的,所以我知道要使用 newImage() 创建的画布的大小。

Catchable fatal error: Argument 1 passed to Imagick::compositeimage() must be an instance of Imagick, string given in /example.com/upload-company-logo.php on line 49

这看起来就是我认为的问题所在,使用我的 $filename 变量。但是,如果我按如下方式调整代码:

$imagick = new Imagick($filename);
...
$imagick->compositeImage($imagick, Imagick::COMPOSITE_OVER, 0, 0);
...

我收到一个新的、看起来更可怕的错误:

Fatal error: Uncaught exception 'ImagickException' with message 'unable to open image 'fast-track_logo_text.eps': No such file or directory @ blob.c/OpenBlob/2480' in /example.com/upload-company-logo.php:47 Stack trace: #0 /example.com/upload-company-logo.php(47): Imagick->__construct('fast-track_logo...') #1 {main} thrown in /example.com/upload-company-logo.php on line 47

【问题讨论】:

  • Apache 错误日志可以让您深入了解可能发生的任何错误
  • 已找到我的错误并将其添加到最初的问题中。
  • 如果我的回答解决了您的问题,请将其标记为已接受。否则,如果您仍有问题,请告诉我

标签: php imagick


【解决方案1】:

当您上传文件时,PHP 将文件存储在随机生成的文件名下的/tmp/ 目录中,以避免与其他文件发生冲突。因此,您必须使用临时路径访问文件才能访问/移动/操作它。

为此,请将$_FILES['file']['name'] 更改为$_FILES['file']['tmp_name']

不要忘记在脚本中的某个位置将文件移动到更永久的位置!脚本执行完毕后,/tmp/ 文件夹中创建的所有文件都将被删除。

有关更多信息,您应该查看有关handling file uploads 的 PHP 文档

【讨论】:

  • 不幸的是,这并没有解决问题。明天我回到办公室时,我会告诉你我重新编写的代码,并让你知道我现在在哪里。
  • @mpdc 好的,请告诉我。当你回到办公室时,试试var_dump($_FILES),这样我就知道你要发送给 Imagick 的内容了
猜你喜欢
  • 2017-07-26
  • 2019-11-18
  • 2019-01-27
  • 2014-12-16
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多