在 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
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
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年前 评论

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