【问题标题】:How to convert an image to Base64 encoding如何将图像转换为 Base64 编码
【发布时间】:2011-04-27 10:05:34
【问题描述】:

如何将图像从 URL 转换为 Base64 编码?

【问题讨论】:

  • 你这样做是为了什么?
  • 将其嵌入到 Img 标签的 src 属性中
  • 这是一个旧线程,但为了完整起见:对图像进行编码非常有意义,尤其是在 css 中使用的小图像(小于 1k)。这样您就可以保存一个请求,由于开销,这将花费更长的时间,甚至可能更大。

标签: php image base64


【解决方案1】:

我认为应该是:

$path = 'myfolder/myimage.png';
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);

【讨论】:

  • 这取决于您需要图像的目的。如果它是一个内联 URL,这就是要走的路。但它与单纯的 base64 编码并不相同。
  • 很好的提示,现在我将创建一个函数来编辑文件上传,或者恢复 move_uploaded_file(),谢谢
  • 这就像一个魅力!一段时间以来一直在使用 DomPDF 图片,非常感谢!
  • pathinfo($path, PATHINFO_EXTENSION) 部分可能不适用于 SVG 图像。只需将最后一行更改为php $base64 = 'data:image/svg+xml;base64,' . base64_encode($data);
【解决方案2】:

简单:

$imagedata = file_get_contents("/path/to/image.jpg");
             // alternatively specify an URL, if PHP settings allow
$base64 = base64_encode($imagedata);

请记住,这会将数据扩大 33%, 如果文件大小超过memory_limit,您就会遇到问题。

【讨论】:

  • @anna 确实如此! Base64 编码通常会这样做。
【解决方案3】:

同样使用这种方式来表示Base64编码格式的图像...

找到PHP函数file_get_content,然后使用函数base64_encode

并获得将str准备为data:" . file_mime_type . " base64_encoded string的结果。在 img src 属性中使用它。以下代码可能会有所帮助:

// A few settings
$img_file = 'raju.jpg';

// Read image path, convert to base64 encoding
$imgData = base64_encode(file_get_contents($img_file));

// Format the image SRC:  data:{mime};base64,{data};
$src = 'data: '.mime_content_type($img_file).';base64,'.$imgData;

// Echo out a sample image
echo '<img src="'.$src.'">';

【讨论】:

【解决方案4】:

万一您(无论出于何种原因)无法使用curlfile_get_contents,您可以解决:

$img = imagecreatefrompng('...');
ob_start();
imagepng($img);
$bin = ob_get_clean();
$b64 = base64_encode($bin);

【讨论】:

    【解决方案5】:
    <img src="data:image/png;base64,<?php echo base64_encode(file_get_contents("IMAGE URL HERE")) ?>">
    

    我试图使用此资源,但一直收到错误消息。我发现上面的代码运行良好。

    我刚刚将“IMAGE URL HERE”替换为您的图片的 URL - http://www.website.com/image.jpg

    【讨论】:

    • 这是值得的
    【解决方案6】:

    很简单,也很常用:

    function getDataURI($imagePath) {
        $finfo = new finfo(FILEINFO_MIME_TYPE);
        $type = $finfo->file($imagePath);
        return 'data:' . $type . ';base64,' . base64_encode(file_get_contents($imagePath));
    }
    
    // Use the above function like below:
    echo '<img src="' . getDataURI('./images/my-file.svg') . '" alt="">';
    echo '<img src="' . getDataURI('./images/my-file.png') . '" alt="">';
    

    注意:文件的 MIME 类型将自动添加(从 this PHP documentation 获取帮助)。

    【讨论】:

      【解决方案7】:

      这是上传编码并将其保存到 MySQL 数据库的代码:

      if (!isset($_GET["getfile"])) {
          if ($_FILES["file"]["error"] > 0) {
              echo "Error: " . $_FILES["file"]["error"] . "<br>";
          } else {
              move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);
      
              $bin_string = file_get_contents($_FILES["file"]["name"]);
              $hex_string = base64_encode($bin_string);
              $mysqli = mysqli_init();
      
              if (!$mysqli->real_connect('localhost', 'root', '', 'arihant')) {
                  die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
              }
      
              $mysqli->query("INSERT INTO upload(image) VALUES ('" . $hex_string . "')");
          }
      }
      

      要显示图像,请使用:

      echo "<img src='data:image/jpeg;base64, $image' width=300>";
      

      【讨论】:

      • 这不是要求的。
      【解决方案8】:

      您也可以通过cURL 执行此操作。您只需要一个图像文件的路径并将其传递给下面给出的函数...

      public static function getImageDataFromUrl($url)
      {
          $urlParts = pathinfo($url);
          $extension = $urlParts['extension'];
          $ch = curl_init();
          curl_setopt($ch, CURLOPT_URL, $url);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
          curl_setopt($ch, CURLOPT_HEADER, 0);
          $response = curl_exec($ch);
          curl_close($ch);
          $base64 = 'data:image/' . $extension . ';base64,' . base64_encode($response);
          return $base64;
      }
      

      【讨论】:

        【解决方案9】:

        这是一个使用cURL 调用的示例...这比file_get_contents() 函数要好。当然,使用 base64_encode()

        <?php
            $url = "http://example.com";
        
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $output = curl_exec($ch);
            curl_close($ch);
        ?>
        
        <img src="data:image/png;base64,<?php echo base64_encode($output);?>">
        

        【讨论】:

        • curl 绝对不会比file_get_contents“更好”,除非您需要向调用 ex 添加其他数据。验证。此外,file_get_contents 将尽可能回退到获取本地文件的内容,因此不会进行无用的网络调用。
        猜你喜欢
        • 2013-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-21
        • 2019-12-10
        • 2014-11-03
        • 1970-01-01
        相关资源
        最近更新 更多