2016-11-24 5 views
0

古いSymfony 2.3プロジェクトがあります。 Symphonyを使用することはありません(私はAngularjsにいます)ので少し難しいです。symfony 2.3 + liip + gaufrette =遠隔画像のサムを作成する(URLで)

私は何をしたいですか:ローカル画像またはリモート画像の親指を表示できるようにプロジェクトを微調整する必要があります(既にアップロードされた画像のURLが表示されます)。サムをローカルキャッシュに作成する必要があります。

リップ画像バンドルは、フィルタ付きプロジェクトで既に使用されています。 作者で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.in 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が不適切です

私は何ができますか?

答えて

0

私は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}}_{{h}} 
* 
*/ 

// retourne le contenu d'une image 
function sendimg($path,$filename){ 
    $contents = file_get_contents($path.$filename); 
    header('Content-type: image/jpeg'); 
    echo $contents; 
} 

/** 
* crée une miniature dans le dossier $updir 
* @param $updir : dossier ou crée la miniature 
* @param $img  : image orignale 
* @param $finalimg : image finale 
* @param $width 
* @param $height 
*/ 
function 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]; 
    if ($original_width > $original_height) { 
     $new_width = $thumbnail_width; 
     $new_height = intval($original_height * $new_width/$original_width); 
    } else { 
     $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); 
    } 
} 

//crypte le nom pour éviter les erreurs avec caractères bizarre dans nom fichiers 
function toMd5($string){ 
    return 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) . "/"; 

// vérifier si image existe 
if(file_exists($path.$filename)){ 
    sendimg($path,$filename); 
}else{ 
    // l'image n'existe pas 
    createDir($path); 
    $tmpfilename = 'original_'.$filename; 
    copy($originalSrc , $path.$tmpfilename); 
    makeThumbnails($path ,$tmpfilename,$filename,$_GET["width"],$_GET["height"]); 
    unlink($path.$tmpfilename); 
    sendimg($path,$filename); 
} 
?> 

と小枝:

<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> 
関連する問題