无法使用fopen和file_get_contents获取使用PHP创建的图像的base64?

时间:2013-03-27 10:57:04

标签: php watermark imgur

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

为图像添加水印并将其托管到imgur不是问题,但问题是:将图像上传到imgur,我们必须通过图片的base64,我无法获取已经给出的图片使用file_get_contentsfopen的PHP脚本水印,它总是给出错误

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

这就是全部

更新:

只是告诉你,我使用该函数直接打开PHP文件而不首先将pic保存到磁盘,由于某种原因我无法将图像保存到磁盘,这就是我使用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

2 个答案:

答案 0 :(得分:0)

你可以试试这个 -

<?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

上找到更多信息

OR

或者你也可以这样做 -

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

答案 1 :(得分:0)

简单的伪代码理念

这应该可以正常工作。如果你得到任何错误说明他们说什么以及你得到了什么。