在 Laravel 中,怎么用接口直接返回一个 base64 的图片?

看过很多图片网站,在图片上点击右键,选择“在新标签页打开图片”,然后看 url 就是一个普通的网址,甚至有的是 .php 的 url。

我在数据库中存了图片的 base64 数据,在请求接口的时候直接 echo 了图片的 base64 字符串,发现浏览器不认。

在 Laravel 中,怎么用接口直接返回一个 base64 的图片?

想问如何在 Laravel 中,通过接口直接返回一个 base64 的图片数据?也就是想要在 img 标签中直接写src = "http://127.0.0.1:8000/source/5090ada9edef280404c515a6ec608223",浏览器能直接显示图片。这时 http://127.0.0.1:8000/source 的响应应该怎么写?

试过这样写,但是不对:

// $base64 是图片的 base64 数据
return response($base64, 200)
    ->header('Content-Type', 'image/png');
从前从前,有个人爱你很久
thebestxt
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
chowjiawei
最佳答案

base64需要去除前缀

Laravel

Laravel

  $aa='iVBORw0KGgoAAAANSUhEUgAAAV8AAAFfCAIAAABm11jWAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFWElEQVR4nO3d0YrbMBBA0ab0/385fXcvBiPZ0tbnPO8mWVguw6BYn+/3+wvgH79XfwBgU+oANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoAtD+rP8DrfD6fZ97o+/3Oet/DSx2s+ou4m9kBaOoANHUAmjoAzVZysYmbtvPt4KXN4vlG8/ylHvuLuJvZAWjqADR1AJo6AM1Wci+X9nAj+7+Ja8hLb3TOacitmB2Apg5AUwegqQPQbCXfYmTROHFJyQ9idgCaOgBNHYCmDkCzlXyLkW9w805mB6CpA9DUAWjqADRbyb08tg68tIYc2VlacP5cZgegqQPQ1AFo6gA0W8nFHrvQZc8HSbIzswPQ1AFo6gA0dQDax1G2d7q0pDzwP/MSZgegqQPQ1AFo6gA0ZyX3MrIsPBj53Usvdd/FOZ52uZbZAWjqADR1AJo6AM1W8mkja7lz5y91vlk8f6NLH8Mq8b9hdgCaOgBNHYCmDkDzDe7F7nsK48RzlgcTH1FphbkzswPQ1AFo6gA0dQCareTTJp6VHPnq9PlL3Xeg8/x9z1/Z/+rDzA5AUwegqQPQ1AFotpJPe+yK6on7zvuuxpl4gpPpzA5AUwegqQPQ1AFotpJvsee5Q5d978zsADR1AJo6AE0dgGYr+bRNzkoebPIt7D1Xp69ldgCaOgBNHYCmDkBzB/diExdvI/doj3xl+/yH73smJXczOwBNHYCmDkBTB6DZSu7lsecs3ndD98Gl448jl+4wndkBaOoANHUAmjoAzVbyLUbWkBO/333pFKY15FpmB6CpA9DUAWjqADRbybcYOQ058mzIS5/KknIrZgegqQPQ1AFo6gA0W8m93Ld4GzmzOGLklm1ryLXMDkBTB6CpA9DUAWi2koutuu7lsVt2Rm7KcVZyLbMD0NQBaOoANHUA2semB0hmB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9D+Ah2sFsmedtMvAAAAAElFTkSuQmCC';
        return response(base64_decode($aa), 200)
            ->header('Content-Type', 'image/png');
3年前 评论
ysxpark 3年前
thebestxt (楼主) 3年前
讨论数量: 13

你这是嫌弃服务器性能太好了吗?还用php来解析图片,你是想做权限或者限制之类的吧,图片内容不要base64 在试试

return response(file_get_contents('a.jpg'), 200)->header('Content-Type', 'image/png');
3年前 评论
chowjiawei 3年前
thebestxt (楼主) 3年前

后端还返回base64的字符串,js将字符串赋值给img标签的src属性中

3年前 评论

Route::get('/', function () { $base64 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAuSURBVChTY/gPBG9OeP7//3wyQTyqGBnTRvGni3HEKwapoYNiwtgLopg48P8/AIn8Fjx9BN4NAAAAAElFTkSuQmCC'; return response($base64,200)->header('Content-Type','image/png'); });

验证了一下,可以显示图片啊

3年前 评论
chowjiawei 3年前
ysxpark 3年前
chowjiawei 3年前
thebestxt (楼主) 3年前
chowjiawei

base64需要去除前缀

Laravel

Laravel

  $aa='iVBORw0KGgoAAAANSUhEUgAAAV8AAAFfCAIAAABm11jWAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFWElEQVR4nO3d0YrbMBBA0ab0/385fXcvBiPZ0tbnPO8mWVguw6BYn+/3+wvgH79XfwBgU+oANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoAtD+rP8DrfD6fZ97o+/3Oet/DSx2s+ou4m9kBaOoANHUAmjoAzVZysYmbtvPt4KXN4vlG8/ylHvuLuJvZAWjqADR1AJo6AM1Wci+X9nAj+7+Ja8hLb3TOacitmB2Apg5AUwegqQPQbCXfYmTROHFJyQ9idgCaOgBNHYCmDkCzlXyLkW9w805mB6CpA9DUAWjqADRbyb08tg68tIYc2VlacP5cZgegqQPQ1AFo6gA0W8nFHrvQZc8HSbIzswPQ1AFo6gA0dQDax1G2d7q0pDzwP/MSZgegqQPQ1AFo6gA0ZyX3MrIsPBj53Usvdd/FOZ52uZbZAWjqADR1AJo6AM1W8mkja7lz5y91vlk8f6NLH8Mq8b9hdgCaOgBNHYCmDkDzDe7F7nsK48RzlgcTH1FphbkzswPQ1AFo6gA0dQCareTTJp6VHPnq9PlL3Xeg8/x9z1/Z/+rDzA5AUwegqQPQ1AFotpJPe+yK6on7zvuuxpl4gpPpzA5AUwegqQPQ1AFotpJvsee5Q5d978zsADR1AJo6AE0dgGYr+bRNzkoebPIt7D1Xp69ldgCaOgBNHYCmDkBzB/diExdvI/doj3xl+/yH73smJXczOwBNHYCmDkBTB6DZSu7lsecs3ndD98Gl448jl+4wndkBaOoANHUAmjoAzVbyLUbWkBO/333pFKY15FpmB6CpA9DUAWjqADRbybcYOQ058mzIS5/KknIrZgegqQPQ1AFo6gA0W8m93Ld4GzmzOGLklm1ryLXMDkBTB6CpA9DUAWi2koutuu7lsVt2Rm7KcVZyLbMD0NQBaOoANHUA2semB0hmB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9DUAWjqADR1AJo6AE0dgKYOQFMHoKkD0NQBaOoANHUAmjoATR2Apg5AUwegqQPQ1AFo6gA0dQCaOgBNHYCmDkBTB6CpA9D+Ah2sFsmedtMvAAAAAElFTkSuQmCC';
        return response(base64_decode($aa), 200)
            ->header('Content-Type', 'image/png');
3年前 评论
ysxpark 3年前
thebestxt (楼主) 3年前

看前面的回复,可能还会跟laravel版本有关。通用的话,先把图片base64后的那部分先解出来还原为原始数据再用原始数据输出

$img = base64_decode($base64data)
return response($img, 200)
    ->header('Content-Type', 'image/png');
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!