首页 文章

symfony 2.3 liip gaufrette =创建远程图像的拇指(通过网址)

提问于
浏览
0

我得到一个旧的Symfony 2.3项目 . 我之前从未使用过Symfony(我在Angularjs)所以它有点难 .

我想做什么:我需要调整项目,以便我可以显示本 Map 像或远程图像的拇指(我将获得已经上传的图像的完整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路径连接

我能做什么 ?

1 回答

  • 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>
    

相关问题