Imagick использует другой каталог и базу данных PDF для миниатюр JPG

Когда я использую php-скрипт, используя основы imagick, в той же папке, где находится изображение, и используя имя файла, вывод идеален, он выводит изображение 1-й страницы PDF:

// Read page 1 
$im = new imagick( 'Miami_Guide.pdf[0]' );
// Convert to png 
$im->setImageFormat( "png" );
// Send out
header( "Content-Type: image/png" );
echo $im;

Вот проблема: как переместить этот скрипт в другой каталог И вместо этого использовать имя поля с именем $uploaded из записи базы данных? Я пробовал это, но это не сработало:

$path: '../../otherplace/';
// $uploaded is the field with the filename value
$fileloc: $path . $uploaded;
// Read page 1 
$im = new imagick( '$fileloc[0]' );
// Convert to png 
$im->setImageFormat( "png" );
// Send out 
header( "Content-Type: image/png" );
echo $im;

Я получаю «Неустранимая ошибка: необработанное исключение« ImagickException »с сообщением« Невозможно прочитать файл: $fileloc »в /home/user/public_html/dir/folder/script.php:334 Трассировка стека: # 0 /home/user /public_html/dir/folder/script.php(334): Imagick->__construct('$fileloc') #1 /home/user/public_html/dir/folder/script.php(226): show_record(Array) #2 {main} добавлено в /home/user/public_html/dir/folder/script.php в строке 334

Также попробовал pathinfo() и снова фатальная ошибка

Я сделал несколько настроек, но теперь Imagick возвращает тарабарщину вместо изображения:

$sourcePath = 'dir/folder/'; // Path of original image
$sourceUrl = 'http://www.site.com/';
$thumbPath = $sourcePath; // Writeable thumb path
$thumbUrl = $sourceUrl . $thumbPath . $uploaded ; 
$im = new Imagick($thumbUrl);
$im->setImageFormat( "jpg" );
$im->thumbnailImage(100, 100);
header("Content-type: image/jpg");
echo "$im";

"Нет ошибки", но выводит тарабарщину вместо изображения:

ÿÛCÿÀdd"ÿÄÿÄ9 !1"#A2QVh'•¦Ôä$Waq±ÓÿÄÿÄ)!1Qq"A'Тar'¡áÿÚ?Íkßµ+¾;é=oÕÜŽW#ü–ÙænÝ»ë'çOo´O$ÒÝr2_^¬ãRiÓF ò~\'0#Ïn¢—·©ÕuµðGMXÍ«ùÛæÿÃ'g§lfÍ,Ø”Sú*¥Áw“h‡/qk,=Ýržzï–>~ÂÒút ƒÔ«á3žŽÃ‹¶s8yd“4–ݤ®§ ‚ÇqW¼ºÎ£‹Áß~.—´¤ŸÅKn@ «DE ±gÄ©"hm&㥰öÔ«b¬..........

Любая помощь?


person cchap    schedule 03.08.2012    source источник


Ответы (2)


Причина, по которой ваш первый пример не работает, заключается в том, что ваша переменная заключена в одинарные, а не в двойные кавычки.

Этот:

$im = new imagick( '$fileloc[0]' );

Сообщает imagemagick искать файл с именем $fileloc, которого, конечно же, не существует.

сделайте это вместо этого:

$im = new imagick( "$fileloc[0]" );

Что касается вашего второго примера, я полагаю, что у вас возникли проблемы, потому что по какой-то причине вы поместили $im в кавычки, когда echo его. Вы должны повторить это так же, как в своем рабочем тесте:

echo $im;

нет

echo "$im";
person Gordon Bailey    schedule 04.08.2012
comment
Это имело какое-то значение? Каков ваш выход сейчас? - person Gordon Bailey; 08.08.2012
comment
Я только что опубликовал решение: echo ‹img src='data:image/jpg;base64,.base64_encode($img).' /›; - person cchap; 08.08.2012

Вот решение:

вместо:

echo $img;

вы должны повторить:

echo "<img src='data:image/jpg;base64,".base64_encode($img)."' />";

Это решило мою проблему с Imagick, надеюсь, это поможет другим.

Одна вещь, в которой я убедился, это протестировать основы: test.pdf > test.jpg, а также протестировать: test.pdf > test.png, test.pdf > test.tiff - как только я убедился, что все расширения находятся в делегаты и работают нормально, я перешел в другой каталог и вытащил файл из другого места.

Кратко обо всех шагах:

1- установлен imagick (php) - я думаю, это был devel

2- указать путь к файлу через http://

3- остальное было в значительной степени основами Imagick:

 $pdfUrl = "http://www.site.com/dir/$file";
 $img = new Imagick($pdfUrl);
 $img->setImageFormat("jpeg");
 echo "<img src='data:image/jpg;base64,".base64_encode($img)."' />";
person cchap    schedule 08.08.2012
comment
Это не выполняет то, что вы изначально намеревались сделать, а именно отправить изображение. Здесь вы отправляете фрагмент html со встроенным в него изображением, что совсем не одно и то же. - person Gordon Bailey; 08.08.2012
comment
Я знаю, но так как после 3 дней попыток найти похожее решение, это решило мои потребности - echo $im; или эхо $im; - оба приводили к тарабарщине и заголовку (Content-type: image/jpg); решал с ошибкой делегата - person cchap; 09.08.2012