【问题标题】:Displaying an image created with imagecreatefromstring显示使用 imagecreatefromstring 创建的图像
【发布时间】:2011-10-21 03:00:03
【问题描述】:

假设我的代码如下所示:

<?PHP

//
//... stuff here
//

$im = imagecreatefromstring( $imageData );

echo "<img src=" . /* what goes here? */ . "alt=\"the image\" />";


//
// more stuff here
//
?>

我要替换什么 /* 这里是什么? */ 这样我的图像数据会显示吗?

谢谢。

【问题讨论】:

    标签: php html image gd jpeg


    【解决方案1】:

    您必须先将资源保存到文件中,或者在单独的请求中使用imagepng() 之类的内容输出它。

    有关详细信息,请参阅imagecreatefromstring() 文档。

    如果你想使用Data URI scheme,你可以试试这个:

    <?php
    
    // If your image is binary data. use `base64_encode($imageData)`.
    $imageData = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl'
               . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr'
               . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r'
               . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg==';
    
    echo '<img src="data:image/png;base64,'. $imageData .'" />';
    

    【讨论】:

      【解决方案2】:

      我认为你可以做这样的事情......

      $src = "data:image/gif;base64," . $imageData ;
      echo "<img src=\"$src\" alt=\"the image\" />";
      

      【讨论】:

        【解决方案3】:
        <?php
        
        $img = imagecreatefromstring($string);
        
        header('Content-type: image/jpeg');
        imagejpeg($img);
        

        应该是你所需要的。照原样使用图像标签,您需要将图像输出到一个临时文件并将图像标签指向该文件(这会引发第二个 HTTP 请求),或者使用data url

        【讨论】:

          【解决方案4】:

          我要替换什么 /* 这里是什么? */ 这样我的图像数据会显示吗?

          您突出显示的位置是img HTML-tagDocs 的所谓src 属性。该值是所谓的URIDocs

          在您的情况下,您希望该 URI 指向有问题的图像数据。您尚未指定图像应输出为哪种类型,因此在以下示例中我将假定它是 PNG 图像。

          您现在需要将图像数据转换为 URI。从图像数据创建的最直接的 URI 是所谓的data: URIWikipedia

          <?PHP
          
          //
          //... stuff here
          //
          
          $im = imagecreatefromstring( $imageData );
          
          ob_start();
          imagepng($img);
          $png = ob_get_clean();
          $uri = "data:image/png;base64," . base64_encode($png);
          
          echo "<img src=" . $uri /* URI goes here */ . " alt=\"the image\" />";
          
          //
          // more stuff here
          //
          ?>
          

          即使这是最直接的方式,也不总是建议这样做,因为图像数据将与 HTML 一起返回给浏览器。如果图像很大,这通常被认为是开销。

          除了使用data: URI,您还可以在其中放置任何其他URI,例如指向服务器上返回图像的PHP 脚本的HTTP URI。这样的脚本可以很简单:

          <?php
          $img = imagecreatefromstring($string);
          header('Content-type: image/png');
          imagepng($img);
          

          这相当于Marc B suggested, see his answer as well

          【讨论】:

          • 谢谢!输出缓冲是我需要做的;希望我能给你一个 +5!
          • 直到我在 `alt=` 之前添加了一个空格后才对我有用...另外,也许出于强迫症的原因,我在原始图像数据周围添加了引号。
          猜你喜欢
          • 1970-01-01
          • 2011-10-17
          • 1970-01-01
          • 2016-07-08
          • 2022-07-19
          • 2011-09-19
          • 2011-10-03
          • 2013-01-10
          • 1970-01-01
          相关资源
          最近更新 更多