• php 如何将image图片转化为字符串(GD库操作及imagick两种实现方式)


    前两天研究php中的 imagick 扩展的时候,突发奇想实现的一个小功能感觉挺有意思,在这里记录一下:

    将一张image图片转化为字符串的形式,先上一张效果图。(运行笔记中的代码需要先安装 php_imagick 扩展 教程可以看这里:PHP扩展之 Imagick安装

     

                                                                                                                                                  
                                                                                                                                                  
                                                                                                                                                  
                                                              ,;+:               ,+:.                                                             
                                                       .fLLLLLLLLLf             fLLLLLLLLLf.                                                      
                                                    .LLLLCLLLLLLLCL*           *LLLLLLLLLLLLLL.                                                   
                                                  .LLLLLLLLLLLLLLLCL.         .LLLLLLLLLLLLLLLLL.                                                 
                                                 +LLLLLLLLLLLLLLCLLLL         LLLLLLLLLLLLLLLLLLL*                                                
                                                tLLLLLLLLLLLLLLLLLLLL:       :LLLLLLLLLLLLLLLLLLLLt                                               
                                               .LLLLLLLLLLLLLLLLLLLLLL       LLLLLLLLLLLLLLLLLLCLLL:                                              
                                               LCLLLLLLLLLLLLLLLLLLLLL.     .LLLLLLLLLLLLLLLLLCLLLLL                                              
                                +LL.           LLLLLLLLLLLLLLLLLLLLLLLt     tLLLLLLLLLLLLLLLLLLLLLLL           .LL*                               
                              .LLLCLt          LLLLLLLLLLLLLLLLLLLLLLLL     LLLLLLLLLLLLLLLLLLLLLLLL          tLLLLL,                             
                             fLLLLLLLL.        fLLLLLLLLLLLLLLLLLLLLLLL     LLLLLLLLLLLLLLLLLLLLLLLf        .LLLLLLLLf                            
                            LLLLLLLLLLLf       ;LLLLLLLLLLLLLLLLLLLLLLL:   :LLLLLLLLLLLLLLLLLLLLLLL;       tLLCLLLLLLLL.                          
                          .LLLLLLLLLLLLLL.      LLLLLLLLLLLLLLLLLLLLLLLt   tLLLLLLLLLLLLLLLLLLLLLLL      .LLLLLLLLLLLLLL,                         
                          LLLLLLLLLLLLLLLL*     ,LLLLLLLLLLLLLLLLLLLLLLf   fLLLLLLLLLLLLLLLLLLLLLL:     *LLLLLLLLLLLLLLLC.                        
                         LLLLLLLLLLLLLLLLLLL     fCLLLLLLLLLLLLLLLLLLLLL   LLLLLLLLLLLLLLLLLCLLLLf     LLLCLLLLLLLLLLLLLLL                        
                        :LCLLLLLLLLLLLLLLLLLL:    LLLLLLLLLLLLLLLLLLLLLL   LLLLLLLLLLLLLLLLLCLLLL    ,LLLLLLLLLLLLLLLLLLLL:                       
                        fLLLLLLLLLLLLLLLLLLLLLf    LLLLLLLLLLLLLLLLLLLLL   LLLLLLLLLLLLLLLLLLLLL    fLCLLLLLLLLLLLLLLLLLLLf                       
                        fLLLLLLLLLLLLLLLLLLLLLLL    LCLLLLLLLLLLLLLLLLLL   LLLLLLLLLLLLLLLLLLLL.   LLLLLLLLLLLLLLLLLLLLLLLf                       
                        :LLLLLLLLLLLLLLLLLLLLLLLC,  .LLLLLLLLLLLLLLLLLLL   LLLLLLLLLLLLLLLLLLL.  ,LLLLLLLLLLLLLLLLLLLLLLLL:                       
                         LLLLLLLLLLLLLLLLLLLLLLLLLt  .LLLLLLLLLLLLLLLLLL   LLLLLLLLLLLLLLLLLL,  *LLLLLLLLLLLLLLLLLLLLLLLLL                        
                          LLLLLLLLLLLLLLLLLLLLLLLLLL  .LLLLLLLLLLLLLLLLL   LLLLLLLLLLLLLLLLL.  LLLLLLLLLLLLLLLLLLLLLLLLLL                         
                           LLLLLLLLLLLLLLLLLLLLLLLLLL.  LLLLLLLLLLLLLLLL   LLLLLLLLLLLLLLLC.  LLLCLLLLLLLLLLLLLLLLLLLLLL                          
                 +.         ,LLLLLLLLLLLLLLLLLLLLLLLLL, .LLLLLLLLLLLLLLL   LLLLLLLLLLLCLLL  .LLLLLLLLLLLLLLLLLLLLLLLLL,         ,*                
                :LLCLf        ,LLLLLLLLLLLLLLLLLLLLLLCL+  LLLLLLLLLLLLLL   LLLLLLLLLLLLLL  ;CLLCLLLLLLLLLLLLLLLLLLLL,       .fLLLL;               
                fLLLLLLLL+       fLLLLLLLLLLLLLLLLLLLLLLt  fLLLLLLLLLLLL   LLLLLLLLLLLLf  *LLLLLLLLLLLLLLLLLLLLLLL       +LLLLLLLLL               
                LLLLLLLLLLLLL,     :LLLLLLLLLLLLCLLLLLLLLf  +CLLLLLLLLLL   LLLLLLLLLLL+  fLLLLLLLLLLLLLCLLLLLLL:     ,LLLLLLLLLLLLL               
                LLLLLLLLLLLLLLLLt     +LLLLLLLLCLCLLLLCLLLL  ,LLLLLLLLLf   fLLLLLLLLL,  LLLLLLLLLLLLLLLLLLLL+     tLLLLLLLLLLLLLLLL               
                +LLLLLLLLLLLLLLLLLLL:    ;LLLLLLLLLLLLLLLLLL  .LLLLLLLLt   tLLLLLLLL   LLLCLLLLLLLLLLLLLL;    ;LLLLLLLLLLLLLLLLLLL*               
                 LLLLLLLLLLLLLLLLLLLLLLf    ,LLLLLLLLLLLLLLLL   fLLLLLL;   ;LLLLLLL   LLLLLLLLLLLLLLLL,   .fLCLLLLLLLLLLLLLLLLLLLL                
                 ;LLLLLLLLLLLLLLLLLLCLLLLLL:   .fLLLLLLLLLCLLL   +LLLLL.    LCLLL+   LLLLLLLLLLLLLf.   :LLLLLLLLLLLLLLLLLLLLLLLLL;                
                  +LLLLLLLLLLLLLLLLLLCLLLLLLLLt   .:LLLLLLLLLLL   .CLLL     LLLL.   LLLLLLLLLLL:    tLLLLLLLLLLLLLLLLLLLLLLLLLLL*                 
                   ,LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL,    tCLLLLLLL    LLL     LLL    LLLLLLLLt    ,LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL:                  
                     fLLLLLLLLLLLLLLLLLLLLLLLLLCLLLLL;    .fLLLLL    ,:     ::    LLLLLf.    ;LLLCLLLLLLLLLLLLLLLLLLLLLLLLLLLf                    
                       fLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLt     ,LLL               fLL,     tLLLLLLLLLLLLLLLLLLLLLLLCLLLLLLLLf                      
                         ,LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLf                           fLLLLLLLLLLLLLLLLLLLLLLLLCLLLLLLLL,                        
                             :fLLLLLLLLLLLLLLLLLLLLLCLLLLLLLLLL                     fCLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLf:                            
                                               .    ..  . ...                        .  ....                                                      
                                   ,,:;++*ttfffffLLLLLLLLLLLLL;                     :CLLLLLLLLLLLLfffftt**++::,.                                  
                           fLLLLLLLLLLLLLLLLLLLLLLLLLLCLLLLL:                         :LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL                          
                            +LLLCLLLLLLLLLLLLLLLLLLLLLLLL;                               ;LLLLCLLLLLLLLLLLLLLLLLLLLLLL+                           
                              fLLLLLLLLLLLLLLLLLLLLLLL:                                     :LLLLLLLLLLLLLLLLLLLLLLLL                             
                                fLLLLLLLLLLLCLLLLCL,                                           ,LLLLLLLLLLLLLLLLLLf                               
                                  .fLLLLLLLLLLL;                                                   ;LLLLCLLLLLLL.                                 
                                                                                                                                                  
                                                                                                                                                  
                                                                                                                                                  
                                                                                                                                                  
                                                                                                                                                  
                                                                                                                                                  
                +GGG+        fG0G,    +GGG+        LGGG.        .GGGGt      tG0G*       L0GG;       GGGG   ;GGG0GGGGG00GGL    ,GGGt               
                +GGG+        L0GG,    +GGG+        LGGG.        GG00GG+      C0G0,     +G0GGG      tG0G;   ;GGGLtffffffff*    ,GGGt               
                +GGG*        fGGG,    +GGG+        LGGG.       CGGGfG0G;     ,GGGC    .GGG0GGt    :0GGf    ;GGG*              ,GGGt               
                +GGG*........LGGG,    +GGG+        LGGG.      LGG0. LGG0,     *GGG+   LGGGtGGG:   GGGG     ;GGGf++++++,       :GGGt               
                +GGGG0G0GGG0GGG0G,    +GGG+        LGG0.     tG0G:   CGGG.     C0GG. +0GG: CGGG  tGGG:     ;GG0GGGGG0G*       ,GGGt               
                +GGGL********C0GG,    +GGG*        CGG0.    *GG0*,,,,:GGGG     .GGGL.0GGt  ,G0Gt,GGGt      ;G0G*......        ,GGGt               
                +GGG*        LGGG,    ,GGGG       :GGGC    ;G0GGG0GGGGG0GGC     +0G0GGGC    +GGGGG0C       ;0GG+              ,GGGt               
                +GGG+        fGGG,     *G0GGf:.,;CGGG0,   :GGGL;;;;;;;;*0GGL     LGG00G,     LGGGGG,       ;0GGt,,,,,:,::,    ,GGGt               
                +GGG+        fGGG,      ,GG0000GG0GGL    .0GGC          *G00t     0GGG*       0G0G+        ;GGGGGGGGG0GGGG.   ,G0Gt               
                .,,,.        ,,,:           .,:,,.       ....            ....      ...         ...          ..............     ...                
                                                                                                                                                  
                                                                                                                                                  
                                                                                                                                                  

                           

    原图:

    <?php
    /**
    * 图片转换为字符图
    * @param string $imagePath 图片地址
    * @param int $width x轴方向缩放比例
    * @param int $height y轴方向缩放比例
    * @return string 生成的字符串图
    */
    function img2String($imagePath,$width=1,$height=1)
    {
        //检查是否安装 php_imagick 扩展
        if(!extension_loaded("imagick")){
            exit("请先安装 imagick 模块");
        }
        $imagick = new Imagick(realpath($imagePath));
        //将生成的imagick对象转化为一个像素迭代器,可以从该迭代器中获取没个像素的 rgb 的值。不知道什么是rgb的请问度娘
        $imageIterator = new ImagickPixelIterator($imagick);
         $str='O80GCLft*+;:,. ';
        foreach ($imageIterator as $rows => $pixels) {
                if($rows%$width == 1 || $width == 1){
                    echo "
    ";
                    foreach ($pixels as $column => $pixel) {
                        if($column%$height == 1 || $height == 1){
                            //灰度计算公式  某个像素点的灰度值 = 红色值*0.3 + 绿色值 * 0.59 + 蓝色值 * 0.11
                            $gray = $pixel->getColor()['r']*0.3 + $pixel->getColor()['g']*0.59 + $pixel->getColor()['b']*0.11;
                            //由于 rgb 三原色的数值范围在 [0,255] 所以求出的灰度值的范围也是 [0,255],所以我们计算像素的 "饱和度" = 灰度值/255;
                            $r = $gray/255;
                            //根据像素的 "饱和度" 选择合适的字符
                            $offset=(int)ceil($r*(strlen($str)-1));    
                            if($offset==(strlen($str)-1)){
                                echo " ";
                            }else{
                                echo $str[$offset];  
                            }
                        }         
                    }
                    $imageIterator->syncIterator();
                }    
        }
    }
    
    img2String('huawei.jpg',2,1);

     GD实现效果(不需要安装imagick)

    /**
    * 图片转为字符串
    * @param string $img_src 图片地址
    * @param int $width_index 横向缩放比例
    * @param int $height_index 纵向缩放比例
    * @return string 生成的字符串
    **/
    function img2str($img_src,$width_index,$height_index){
        $resource = imagecreatefromjpeg($img_src);
        $width = imagesx($resource);
        $height = imagesy($resource);
        imagefilter($resource, IMG_FILTER_GRAYSCALE);
    
        for ($i=0; $i < $height; $i++) {
            if($i%$height_index==0){
                for ($j=0; $j < $width; $j++) {
                    if($j%$width_index==0){
                        $color_index = imagecolorat($resource, $j, $i);
                        $rgb = imagecolorsforindex($resource,$color_index);
                        $gray = $rgb['red'];
                        $str='O80GCLft*+;:,. ';
                        $r = $gray/255;
                        $offset=(int)ceil($r*(strlen($str)-1));
                        echo $str[$offset];
                    }
                }
                echo "
    ";
            }
        }
    }
    
    img2str("./huawei.jpg",1,2);
  • 相关阅读:
    小数的编程
    小数的编程
    硬币趣味题
    硬币趣味题
    好玩的 emoji
    ThreadPoolExecutor使用介绍
    希尔排序
    OpenCms创建站点过程图解——献给OpenCms的刚開始学习的人们
    Linux C 编程内存泄露检測工具(二):memwatch
    C++封装、继承、多态
  • 原文地址:https://www.cnblogs.com/itsuibi/p/10997258.html
Copyright © 2020-2023  润新知