【问题标题】:can't fetch base64 of image created using PHP using fopen and file_get_contents?无法使用 fopen 和 file_get_contents 获取使用 PHP 创建的 base64 图像?
【发布时间】:2013-03-17 10:26:15
【问题描述】:

所以,我想要的是用户可以上传图片的地方,一个 PHP 脚本会为其添加水印,并且图片将使用 imgur API 托管在 imgur 上

给图片加水印,托管到imgur上是没有问题的,但是问题是:上传图片到imgur,必须通过图片的base64,已经给的图片取不出来PHP脚本使用file_get_contentsfopen加水印,总是报错

请有人帮我解决问题,以便我可以获取图像,将其编码为 base64

就是这样

更新:

只是告诉你,我使用该功能直接打开 PHP 文件而不先将图片保存到磁盘,由于某种原因我无法将图像保存到磁盘,这就是我使用 imgur 的原因

再次更新:

这是我的代码:

<?php
    header('Content-type: image/png');
    $image = $_GET['url'];
    $imagesize = getimagesize($image);
    $img = imagecreatetruecolor($imagesize[0], $imagesize[1] + 50);
    imagecopy($img, imagecreatefrompng($image), 0, 0, 0, 0, $imagesize[0], $imagesize[1]);
    $string = "Some wild watermarks";
    $font = "font.ttf";
    $fontSize="30";
    $textColor = imagecolorallocate($img, 255,255,255);
    $x=7;
    $y=$imagesize[1] + 42;
    imagettftext($img,$fontSize,0,$x,$y,$textColor,$font,$string);
    imagepng($img);
?>

这是我得到的错误:

使用file_get_contents

Warning: file_get_contents(watermark.php?url=roughdesign.png) [function.file-get-contents]: failed to open stream: Result too large in URL

使用fopen

Warning: fopen(watermark.php?url=roughdesign.png) [function.fopen]: failed to open stream: Result too large in URL
Warning: filesize() [function.filesize]: stat failed for URL
Warning: fread(): supplied argument is not a valid stream resource in URL

【问题讨论】:

  • 请发布您的代码。
  • “总是出错”不是对您的问题的正确描述。解释并展示您尝试过的内容、发生的错误以及您预期会发生的情况。
  • @cryptic:稍后当我到达我的电脑时
  • 主题与您的问题无关。你应该重新考虑一下。因为通过阅读它,假设您相信您在创建水印和上传图像方面存在问题(我认为这是两个单独的问题),但随后您声明这不是问题。此外,“它总是给出错误”的信息量不足。甚至在写入文件或尝试打开错误的路径之前,所有内容都可能从锁定文件变为错误。 quality.mozilla.org/docs/bugzilla/starter-kit/…
  • @repox:我完全忘记了错误的含义,但如果我没记错的话,它会说“图片超出了最大文件大小”。我想知道为什么会出现错误,因为图片不大

标签: php watermark imgur


【解决方案1】:

简单的伪代码思路

这应该可以正常工作。如果您收到任何错误,请说明他们所说的内容以及您从哪里得到的。

【讨论】:

  • 但这意味着上传图片到imgur没有用,因为由于某种原因我无法将图片保存到磁盘,所以我将它托管到imgur
  • @gamehelp16:所以你只想给内存中的图片加水印,然后上传而不保存?那应该可以,只需计算新创建的图像的base64而不保存它。如果您不允许在本地保存图像,我猜您尝试使用 get_file_contents 读取时出错的文件必须是原始图像?如果是这种情况,您是否有权读取该文件?
  • 对不起,我不知道本地主机的文件权限,因为我还在本地测试代码
【解决方案2】:

你可以试试这个-

<?php
function base64_encode_image ($filename=string,$filetype=string) {
    if ($filename) {
        $imgbinary = fread(fopen($filename, "r"), filesize($filename));
        return 'data:image/' . $filetype . ';base64,' . base64_encode($imgbinary);
    }
}
?>

您可以在base64_encode找到更多信息

您也可以这样做-

$imageContent= file_get_contents($yourImage);
$encoded = base64_encode($imageContent);

【讨论】:

  • 我认为他的问题与打开文件,添加水印并且之后无法获取base64有关。他应该添加水印,保存“新”图像,然后打开那个并计算该图像的base64。现在我们不知道他是否以及何时保存 crated 图像,以及他试图在哪个图像或数据上计算 base64。
  • @inquam:所以,我无法计算base64的图像是PHP脚本创建的图像
  • @gamehelp16:您添加水印并保存文件,然后尝试使用 file_get_contents 打开该文件?错误信息是什么意思?
  • 不,我使用file_get_contents直接打开PHP文件
  • @gamehelp16: PHP 文件?什么PHP文件?你刚才不是在图片上加水印吗? :)
猜你喜欢
  • 2013-07-23
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 2014-10-03
  • 1970-01-01
相关资源
最近更新 更多