【问题标题】:fetch image and convert it to data-uri format获取图像并将其转换为 data-uri 格式
【发布时间】:2017-01-29 05:34:59
【问题描述】:

我有兴趣使用 PHP 通过 HTTP 请求图像,然后将图像转换为数据 URI。我该怎么做呢?

例如:

$img = file_get_contents("http://something.com/something.png");

$datauri = magicalfunction($img);

echo("<img src=\"$datauri\" />");

我知道我在那里使用了file_get_contents(),但我更喜欢不使用文件函数的解决方案。如果可能,我想使用 cURL。

【问题讨论】:

  • 欢迎来到 Stack Overflow!要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,describe the problem 以及迄今为止为解决它所做的工作。

标签: php curl data-uri


【解决方案1】:

数据 URI 由文字 data: 组成,然后是媒体类型(如果省略,则默认为 text-plain),;base64 如果您正在编码(如果您有二进制数据作为图像,您应该这样做) ,然后是数据本身。

Linky 给一些文档。

你可以这样做:

// Your image
$image = 'crazy_cat.jpg';

$myvar = file_get_contents($image);

function srcData($image)
{

    $finfo = finfo_open(FILEINFO_MIME_TYPE);

    // reads your image's data and convert it to base64
    $data = base64_encode($image);

    // Create the image's SRC:  "data:{mime};base64,{data};"
    return 'data: ' . finfo_buffer($finfo, $image) . ';base64,' . $data;

}

echo "<img src='" . srcData($myvar) . "'/>";

哒哒!

如果您像data 那样在提供图像之前下载图像,您必须在调用此函数之前执行此操作,并将包含该文件的缓冲区传递给该函数。

对于加分:“如何使用 curl”可以总结如下:

$ch = curl_init('http://placekitten.com.s3.amazonaws.com/homepage-samples/408/287.jpg');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$myvar = curl_exec($ch); 
curl_close($ch);

您将在$myvar 中拥有您的图像,准备好传递给srcData()

【讨论】:

  • 这个的 cURL 实现是什么?通常使用file_get_contents() 被认为是不安全的,虽然我自己可以轻松替换它,但我不确定finfo_ 功能。
  • 这意味着在您的本地文件系统中使用。下载图像是另一回事,不应由同一功能处理。只需以您想要的任何方式下载它,然后将其传递给函数。
  • 那里,现在我进行了编辑以正确分离其职责。现在更清楚的是,通过 curl、file_get_contents 或您使用的任何一种方式进行的下载都应该在 BEFORE 使用它之前进行。如果您在使用 curl 时遇到问题,这是一个不同的问题(这里经常有人问到这个问题,搜索一下,您会发现很多食谱)
猜你喜欢
  • 2019-09-10
  • 2020-01-17
  • 2017-07-27
  • 2016-07-07
  • 1970-01-01
  • 2021-08-23
  • 2020-09-02
  • 1970-01-01
  • 2019-05-22
相关资源
最近更新 更多