Я получаю старый проект Symfony 2.3.
Я никогда не использовал Symfony раньше (я в Angularjs), так что это немного сложно.
Что я хочу сделать: мне нужно настроить проект, чтобы я мог отображать большой палец локального изображения или удаленного изображения (я получу полный URL-адрес уже загруженных изображений), большой палец должен быть создан в локальном кэше.
Liip image bundle уже используется в проекте с фильтрами.
Я установил KnpGaufretteBundle с композитором.
1.in services.yml
services:
acme.liip_imagine.binary.loader.stream.profile_photos:
class: "%liip_imagine.binary.loader.stream.class%"arguments:
- 'gaufrette://profile_photos/'
tags:
- { name: 'liip_imagine.binary.loader', loader: 'stream.profile_photos' }
2.in config.yml
liip_imagine:
#cache_clearer: false
#cache_mkdir_mode: 0777
loaders:
stream.profile_photos:
stream:
wrapper: gaufrette://profile_photos
filter_sets:
url_thumb:
data_loader: stream.profile_photos
filters:
thumbnail: { size: [100, 100], mode: outbound }
3. в view.twig
// If i display directly the img it works
{% set img = row.path %}
<a href="{{ img }}" class="grouped_elements" rel="group" title="{{ row.copyright }}">
<img src="{{ img }}" width="100px" alt="{{ img }}" border="0" />
</a>
// but i get an error with this :
{% set imgspe = row.path|basename %}
{% set img = ['uploads/'~module.uploaddir~'/', imgspe]|join('') %}
<a href="{{ asset(img) }}" class="grouped_elements" rel="group" title="{{ row.copyright }}">
<img src="{{ asset(img) | imagine_filter('url_thumb') }}" alt="{{ imgspe }}" border="0" />
</a>
Ошибка :
NetworkError: 404 Not Found - http://publish.test/app_dev.php/media/cache/url_thumb/http://www.jump-voyage.com/wp-content/uploads/2016/06/Google-Images-4.jpg
'Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "Source image not found." at /var/www/test/publishv2/vendor/liip/imagine-bundle/Liip/ImagineBundle/Binary/Loader/StreamLoader.php line 55'
Таким образом, URL не является хорошим, потому что это локальный путь + конкатенация пути URL
Что я могу сделать ?
Я делаю это вручную без liip / gaufrette.
Я делаю это вручную:
<?php
/*
* étapes
*
* si image existe
* on la retourne
*
* sinon
* créer le chemin complet
* créer la vignette
* retourner la vignette
*
* chemin ou sont stocké les images : media/cache_url_thumb/thumb_{{w}}_
*
* /
// возвращение изображения
function sendimg ($ path, $ filename) {
$ contents = file_get_contents ($ path. $ filename);
заголовок ('Content-type: image / jpeg');
echo $ content;
}
/ **
* CREE UN миниатюра Dans Le Dossier $ Updir
* @param $ updir: досье в миниатюре
* @param $ img: image orignale
* @param $ finalimg: финал изображения
* @param $ width
* @param $ height
* /
Функция makeThumbnails ($ updir, $ img, $ finalimg, $ width = 134, $ height = 189)
{
$ thumbnail_width = $ width;
$ thumbnail_height = $ height;
$ arr_image_details = getimagesize ("$ updir". "$ img");
// cl ($ arr_image_details);
$ original_width = $ arr_image_details [0];
$ original_height = $ arr_image_details [1];
если ($ original_width > $ original_height) {
$ new_width = $ thumbnail_width;
$ new_height = intval ($ original_height * $ new_width / $ original_width);
} еще {
$ new_height = $ thumbnail_height;
$ new_width = intval ($ original_width * $ new_height / $ original_height);
}
$ dest_x = intval (($ thumbnail_width - $ new_width) / 2);
$ dest_y = intval (($ thumbnail_height - $ new_height) / 2);
if ($ arr_image_details [2] == IMAGETYPE_GIF) {
$ imgt = "ImageGIF";
$ imgcreatefrom = "ImageCreateFromGIF";
}
if ($ arr_image_details [2] == IMAGETYPE_JPEG) {
$ imgt = "ImageJPEG";
$ imgcreatefrom = "ImageCreateFromJPEG";
}
if ($ arr_image_details [2] == IMAGETYPE_PNG) {
$ imgt = "ImagePNG";
$ imgcreatefrom = "ImageCreateFromPNG";
}
if ($ imgt) {
$ old_image = $ imgcreatefrom ("$ updir". "$ img");
$ new_image = imagecreatetruecolor ($ thumbnail_width, $ thumbnail_height);
imagecopyresized ($ new_image, $ old_image, $ dest_x, $ dest_y, 0, 0, $ new_width, $ new_height, $ original_width, $ original_height);
$ imgt ($ new_image, "$ updir". $ finalimg);
}
}
// криптовалюта для женщин и женщин
function toMd5 ($ string) {
вернуть md5 ($ string);
} // créer un dossier si il n'éxiste pas
function createDir ($ path) {
if (! is_dir ($ path)) {
if (! mkdir ("$ path", 0777, true)) {
die ('Echec lors de la création du repertoire $ path pour les thumb images distantes ...');
}
}
} $ originalSrc = $ _GET ["src"];
$ filename = toMd5 ($ originalSrc);
$ path = 'media / cache_url_thumb /'. "thumb _". $ _ GET ["width"]. "_". $ _ GET ["height"]. "/";
$ path. = substr ($ filename, 0,3). "/";
// проверка изображения существует
если (file_exists ($ путь. $ имя_файла)) {
sendimg ($ путь, $ файла);
} Еще {
// l'image n'existe pas
CreateDir ($ путь);
$ tmpfilename = 'original _'. $ filename;
копия ($ originalSrc, $ path. $ tmpfilename);
makeThumbnails ($ path, $ tmpfilename, $ filename, $ _ GET ["width"], $ _ GET ["height"]);
разъединить ($ путь $ tmpfilename.);
sendimg ($ путь, $ файла);
}
?>
[/ NOEDIT]
и веточка:
<a href="{{ img }}" class="grouped_elements" rel="group" title="{{ row.copyright }}">
<img src="/geturlimage.php?src={{ img |url_encode }}&width=100&height=100" alt="{{ img }}" border="0" />
</a>
Другие решения
Других решений пока нет …