使用Imagick将EPS转换为JPEG

时间:2014-06-23 12:54:57

标签: php imagick

我有一个脚本,当前接受JPEG输入,将其保存到数据库,将其复制到文件夹,然后重定向。但是,有人告诉我,我们需要能够在发生任何其他事情之前将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对象,其中包含合成图像" ,但我和#39;我不确定此时$filename是否是?{/ p>

对于面向对象的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

1 个答案:

答案 0 :(得分:0)

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

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

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

有关更多信息,请查看PHP有关handling file uploads

的文档