【问题标题】:Convert GD output to base64将 GD 输出转换为 base64
【发布时间】:2012-01-23 00:25:53
【问题描述】:

好吧,我的问题很简单,我只想将imagepng/imagejpg 的输出转换为base64,我该怎么做?正确的方法是捕获输出缓冲区?谢谢。

【问题讨论】:

    标签: php gd base64 image


    【解决方案1】:

    imagejpeg/imagepng 不返回任何数据,它们将图像数据直接写入输出流(或文件)。

    如果您想捕获编码为 base64 的数据,最简单的方法是使用 PHP Output Control Functions,然后在 $image_data 上使用 base64_encode

    ob_start (); 
    
      imagejpeg ($img);
      $image_data = ob_get_contents (); 
    
    ob_end_clean (); 
    
    $image_data_base64 = base64_encode ($image_data);
    

    【讨论】:

      【解决方案2】:

      base64 编码图像最常见的用例是 HTML 输出。我想为这个案例提供一个更完整的解决方案。我还添加了切换输出图像格式的功能。

      // Example
      $gdImg = imagecreate( 100, 100 );
      imagecolorallocate( $gdImg, 0, 0, 0 );
      echo gdImgToHTML( $gdImg );
      imagedestroy( $gdImg );
      
      // Create an HTML Img Tag with Base64 Image Data
      function gdImgToHTML( $gdImg, $format='jpg' ) {
      
          // Validate Format
          if( in_array( $format, array( 'jpg', 'jpeg', 'png', 'gif' ) ) ) {
      
              ob_start();
      
              if( $format == 'jpg' || $format == 'jpeg' ) {
      
                  imagejpeg( $gdImg );
      
              } elseif( $format == 'png' ) {
      
                  imagepng( $gdImg );
      
              } elseif( $format == 'gif' ) {
      
                  imagegif( $gdImg );
              }
      
              $data = ob_get_contents();
              ob_end_clean();
      
              // Check for gd errors / buffer errors
              if( !empty( $data ) ) {
      
                  $data = base64_encode( $data );
      
                  // Check for base64 errors
                  if ( $data !== false ) {
      
                      // Success
                      return "<img src='data:image/$format;base64,$data'>";
                  }
              }
          }
      
          // Failure
          return '<img>';
      }
      

      【讨论】:

      • 我们需要打电话给imagedestroy($gdImg) 还是ob_end_clean() 会为我们处理这个问题?
      • @user3442612 使用后手动销毁图像是一种很好的做法。我不相信它与这个简短的示例相关,但我会添加它以“以正确的方式”做事。谢谢。
      猜你喜欢
      • 2018-07-19
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      • 1970-01-01
      • 2015-12-09
      • 2013-09-10
      • 2016-04-15
      • 2011-01-12
      相关资源
      最近更新 更多