2016-11-24 38 views
0

我得到一箇舊的Symfony 2.3項目。 我從來沒有使用Symfony(我在Angularjs),所以它有點困難。symfony 2.3 + liip + gaufrette =創建一個遠程圖像的拇指(通過url)

我想做什麼:我需要調整項目,以便我可以顯示本地圖像或遠程圖像的拇指(我將獲得已上傳圖像的完整url),拇指應該在本地緩存中創建。

項目中已經使用過濾器的Liip圖像包。 我用作曲家安裝了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>