Проблема вывода tif файла в browser

Александр-q

Новичок
Данный вопрос уже поднимался здесь, но решения я там не увидел
http://phpclub.ru/talk/threads/Вывод-tif-файла-в-броузер.28749/

Задача аналогичная:
1. Имеется большая база картинок в формате tiff
2. Нужно чтобы эти картинки можно было просмотреть на сайте (сайт на php)
PS допустимо конвертирование картинок скриптами в любой понятный браузерам формат
PPS возможно это умеет делать ImageMagick, но я не смог в нем разобраться


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

Очень надеюсь на вашу помощь!
 

Александр-q

Новичок
Насколько я понял это внутренняя команда серверу на преобразование одной картинки?

Дополню:
tif картинок на сервере очень много, поэтому конвертирование посредством php-скриптов в понятный формат допустимо только "на лету" (размер картинок относительно маленький - не более 500kb) при обращении к конкретному tif-файлу
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Александр-q
это для тебя 500кб - маленький, а для PHP - вполне себе, если писать конвертер на GD или дергать каждый раз сервер при высокой нагрузке. Что мешает хранить их на сервере в нормальном, человеческом формате?
 

Александр-q

Новичок
Александр-q
это для тебя 500кб - маленький, а для PHP - вполне себе, если писать конвертер на GD или дергать каждый раз сервер при высокой нагрузке. Что мешает хранить их на сервере в нормальном, человеческом формате?
В основном даже меньше по размеру, чем 500kb. Нагрузка на сервер допустима.
Основная проблема в том, что все картинки уже на сервере и в tiff формате!
Хотелось все-таки найти какое-нибудь готовое решение, а не писать что называется с нуля.
 

Вурдалак

Продвинутый новичок
Александр-q, тебе места на диске жалко что ли? С нуля там переписывать ничего не надо. Данный тебе код впихнуть в то место, где происходит загрузка. На всякий случай можно хранить изображение сразу в двух форматах.

В основном даже меньше по размеру, чем 500kb
Дело не столько в размере файла, сколько в размере изображения (width x height).
 

Александр-q

Новичок
Александр-q, тебе места на диске жалко что ли? Дело не столько в размере файла, сколько в размере изображения (width x height).
Таких картинок на сервере более 50.000, поэтому выкачивать картинки на локальный компьютер, преобразовывать их в нужный формат и затем заново загружать на сервер представляется маловозможным.
 

Александр-q

Новичок
Александр-q, зачем выкачивать на локальный компьютер?
Хотелось бы оставить картинки именно в таком виде, в каком они сейчас они есть. Заказчик сразу оговорился, что желательно формат сохранить, так как ему удобнее добавлять новые изображения. У него по-моему есть спец. программа для этого.
То есть предпочтительнее обработку производить в момент обращения к рисунку.
 

Вурдалак

Продвинутый новичок
Ну, никто картинки оригинальные и не будет изменять. Ты можешь, кстати, конвертировать на лету, но сохранять результат, чтобы при повторном обращении не повторять операцию.
 

Александр-q

Новичок
Ну, никто картинки оригинальные и не будет изменять. Ты можешь, кстати, конвертировать на лету, но сохранять результат, чтобы при повторном обращении не повторять операцию.
А можно поподробнее?
Не совсем понял как можно это реализовать, ведь "convert -quality 80 /path/test.TIF /path/test.jpg" не php-команда.
Буду очень благодарен за фрагмент кода.
 

Вурдалак

Продвинутый новичок
PHP:
if( ! file_exists($cacheImg) || filemtime($cacheImg) < filemtime($origImg) )
{
    exec(sprintf('convert -quality 80 "%s" "%s"', escapeshellcmd($origImg), escapeshellcmd($cacheImg)));
}

header('Content-type: ...'); // of $cacheImg

header('X-Accel-Redirect: ' . $cacheImg); // nginx
// или
readfile($cacheImg);
Как-то так.
 

A1x

Новичок
можно конвертировать на лету через mod_rewrite
примерно так:

PHP:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/converted/.+\.jpg$
RewriteRule ^.+ "/tiff2jpg.php" [L]
т.е. если файла .jpg не существует то запрос перенаправляется на скрипт /tiff2jpg.php,
который конвертирует, сохраняет .jpg файл в /converted и отдает его readfile(), как в примере выше

это если используете apache
 

Александр-q

Новичок
Проблем с перенаправлением к php-скрипту при запросе tiff-файла нет. Проблема именно в открытии такого файла браузером - почему-то предлагается его сохранить, а не отображается как обычная картинка на странице тегом img.

Насколько я понял обойтись без установки программы на сервер не удасться? Или все-таки существуют библиотеки на php, подходящие для решения моей задачи?
 

AmdY

Пью пиво
Команда форума
Александр-q
судя по гуглу, проблемы с компрессией tiff, убери компрессию, либо выставь такую которая поддерживается браузерами
 

Александр-q

Новичок
В общем не ожидал, что все так грустно: нужно перекодировать все картинки в нормальный формат и закачивать их на сервер.
 
Сверху