【问题标题】:Image Intervention InvalidImageDataStringException Laravel图像干预 InvalidImageDataStringException Laravel
【发布时间】:2015-02-09 19:15:10
【问题描述】:

早上好,我似乎无法修复错误,我目前将 base64 字符串传递给我的 image intervention api 并尝试将其保存到公共目录。

错误

错误: {类型:干预\图像\异常\无效图像数据字符串异常, 消息:,…} 文件: “/home/celeb/public_html/dev/vendor/intervention/image/src/Intervention/Image/Image.php” 行:1968 消息:“”类型: "干预\图像\异常\无效图像数据字符串异常"

我传递给 Image::make 的数据字符串 -> http://pastebin.com/BGbUeZhr

代码

public function upload(){

    $fileName = Input::get('name');
    $explode    = explode('.',$fileName);
    $extension  = strtolower(end($explode));

    $img = Image::make(base64_decode(Input::get('data')));

    $fileName = "profiles/".md5(time()).'.'.$extension;
    $path = public_path($fileName);

    if($img->save($path)){
        echo "Image Added";
    }
}

没有 base64_decode 错误。

{error:{type:Intervention\Image\Exception\ImageNotFoundException,…}}
error: {type:Intervention\Image\Exception\ImageNotFoundException,…}
file: "/home/celeb/public_html/dev/vendor/intervention/image/src/Intervention/Image/Image.php"
line: 198
message: "Image file (data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8AAAAIcCAYAAAA5Xcd7AAAgAElEQVR4Xuydh0MUWRLG30RyRgEJKmDOYYN39//f7a5uNOtG3eQqihInXn31uprHiCIyzEzPfG+vrloYpru/Hob5daVUVZbjogJUoCkKPH/+3N27dy+2x48fuxcvXsS2tLTk6vErmkqlnUtlHHxKvPzjrfOtVsuyr7Jz6itN0YM7pQJUgApQgYNVIJPpddnckMvmh9Wns/0uncrK34acS6XhszscgP+bkUrBp+Rv..

【问题讨论】:

  • 我认为你不需要使用base64_decode,对吗?
  • 不,不需要。
  • 更新了代码,谢谢

标签: php laravel


【解决方案1】:

不要解码字符串,图像干预需要图像的base64编码字符串来制作图像。查看here 的源参数。

参数是;

创建图像的来源。该方法响应以下输入类型:

  • 字符串 - 文件系统中图像的路径。
  • 字符串 - 图像的URL(必须启用allow_url_fopen)。
  • 字符串 - Binary 图像数据。
  • 字符串 - Data-URL 编码图像数据。
  • 字符串 - Base64 编码图像数据。
  • resource - gd 类型的 PHP 资源。 (使用GD驱动时)
  • 对象 - Imagick 实例(使用 Imagick 驱动程序时)
  • 对象 - Intervention\Image\Image 实例
  • object - SplFileInfo 实例(通过 Symfony\Component\HttpFoundation\File\UploadedFile 处理 Laravel 文件上传)

编辑:

data:image/png;base64, 不应该在那里;

使用;

$image_str = Input::get('data');
$array = explode(',', $image_str);

Image::make($array[1]); 

【讨论】:

  • @Brent 更新了答案。顺便说一句,逗号不会出现在 base64 编码的字符串中,所以不要担心它的分裂程度低于应有的程度。
  • 嗨,马特,我已经更新了代码,但出现以下错误。 codetidy.com/5867
  • @Brent 你用的是最新版本吗?
  • 我的作曲家有 (*), ,所以那不应该是最新的吗? “干预/图像”:“*”
  • @Brent * 是任何事物的通配符。我会将其限制为 2.* 版本,因为 base64 字符串不适用于 2.0.8 及更低版本。
猜你喜欢
  • 1970-01-01
  • 2019-01-16
  • 2017-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-11
  • 1970-01-01
相关资源
最近更新 更多