Конвертируйте EPS в JPEG с помощью Imagick

#php #imagick

#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 я вижу, что первым параметром для 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

Как вы получаете размеры файла EPS, если getimagesize() это не работает ?! Это необходимо, чтобы я знал размер холста для создания 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. Журналы ошибок Apache могут дать вам некоторое представление о любых ошибках, которые могут возникать

2. Я нашел и добавил свои ошибки к первоначальному вопросу.

3. Если мой ответ решил вашу проблему, пожалуйста, отметьте его как принятый. В противном случае дайте мне знать, если у вас все еще возникают проблемы

Ответ №1:

Когда вы загружаете файл, PHP сохраняет файл в /tmp/ каталоге под случайно сгенерированным именем файла, чтобы избежать столкновений с другими файлами. Таким образом, вы должны получить доступ к файлу, используя временный путь, чтобы иметь возможность доступа / перемещать / манипулировать им.

Для этого измените $_FILES['file']['name'] на $_FILES['file']['tmp_name']

Не забудьте также переместить файл в более постоянное место в какой-то момент вашего скрипта! После завершения выполнения скрипта все созданные файлы в /tmp/ папке будут удалены.

Для получения дополнительной информации вам следует ознакомиться с документацией PHP об обработке загрузки файлов

Комментарии:

1. К сожалению, это ничего не решило. Я сообщу вам о своем переработанном коде завтра, когда вернусь в офис, и сообщу, где я нахожусь сейчас.

2. @mpdc Хорошо, держите меня в курсе. Когда вы вернетесь в офис, попробуйте сделать var_dump($_FILES) , чтобы я знал, что вы отправляете в Imagick