整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

SpringBoot如何输出base64的图片及好处

SpringBoot如何输出base64的图片及好处


Spring Boot中输出Base64编码的图片通常涉及以下步骤:

  1. 读取图片文件:首先,你需要从文件系统、数据库或其他存储位置读取图片文件。
  2. 将图片转换为字节数组:使用Java的IO类库将图片文件内容读入字节数组。
  3. 对字节数组进行Base64编码:使用Java 8的Base64工具类或者Apache Commons Codec库将字节数组编码为Base64字符串。
  4. 将Base64字符串输出:通过Spring Boot的控制器将Base64字符串作为响应返回给客户端。

下面是一个简单的例子,展示了如何在Spring Boot中实现这一过程:

import org.springframework.core.io.ClassPathResource;  
import org.springframework.http.MediaType;  
import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.ResponseBody;  
  
import java.nio.file.Files;  
import java.nio.file.Paths;  
import java.util.Base64;  
  
@Controller  
public class ImageController {  
  
    @GetMapping(value="/image", produces=MediaType.TEXT_PLAIN_VALUE)  
    @ResponseBody  
    public String getImageAsBase64() throws Exception {  
        // 读取图片文件  
        byte[] imageBytes=Files.readAllBytes(Paths.get(new ClassPathResource("image.png").getURI()));  
  
        // 对字节数组进行Base64编码  
        String encodedImage=Base64.getEncoder().encodeToString(imageBytes);  
  
        // 返回Base64编码的字符串  
        return "data:image/png;base64," + encodedImage;  
    }  
}

在这个例子中,我们假设图片文件image.png位于类路径下。控制器方法getImageAsBase64读取该文件,将其转换为Base64编码的字符串,并通过HTTP响应返回给客户端。

输出Base64编码图片的好处

  1. 减少HTTP请求:通过将图片嵌入到HTML或CSS中,可以减少因加载外部图片资源而产生的额外HTTP请求,从而提高页面加载速度。
  2. 简化资源管理:在某些情况下,将图片编码为Base64可以简化资源管理,因为图片数据可以直接嵌入到代码或数据库中,而无需额外的文件存储和引用。
  3. 数据安全性:在某些应用场景中,将图片编码为Base64可以增加数据的安全性,因为图片数据可以与其他文本数据一起加密或混淆。

然而,需要注意的是,将图片编码为Base64会增加数据的大小(大约增加33%),并可能增加服务器的CPU负载,因为编码和解码过程需要额外的计算资源。因此,在决定是否使用Base64编码图片时,需要权衡这些利弊。

eb图像的输出设置

在Photoshop中,优化Web图像后,在“存储为Web所有格式”对话框中,点击“优化”扩展按钮,在展开的下拉菜单中选择“编辑输出设置”命令。如图所示:


打开“编辑输出设置”对话框,在对话框中可以控制如何设置HTML文件的格式、如何命名文件和切片,以及在存储优化图像时如何处理背景图像。如图所示:


增加内容:Web图像可以是位图,也可以使矢量图。位图的格式如GIF、JPEG、PNG等都与分辨率有关,这就意味着位图图像的尺寸随着显示器分辨率的不同而发生着变化,图像的品质也可能会发生变化。矢量图格式SVG、SWF与分辨率没有关系,大家可以对图像进行放大或者是缩小,并且不会降低图像的品质。矢量格式也可以包含栅格数据,可以使用“存储问Web所用格式”命令将图像导出为SVG和SWF格式。

建议大家集合之前小编分享的内容一起来学习Photoshop,在操作过程中遇到问题可在留言区进行留言,小编会尽快进行回复。

单击上方的关注按钮关注小编,一起来学习PS吧!

篇文章我们讲解了webpack中的loader,并且使用less、less-loader、css-loader、style-loader,将一个在js中import的less文件通过webpack将样式打包到了页面中,但是我们发现,页面中样式确实是有了,但是页面的样式是通过style标签的形式写入到了页面中,在实际开发中我们其实更倾向于使用link标签导入样式,这时候应该怎么做呢?

一、使用mini-css-extract-plugin插件

这个插件能将CSS提取为独立的文件,对每个包含css的js文件都会创建一个CSS文件,支持按需加载css和sourceMap。

首先安装插件

cnpm install mini-css-extract-plugin --save-dev

安装完插件后其实就是设置了,下面是简单的设置信息:

const { CleanWebpackPlugin }=require('clean-webpack-plugin');
const HtmlWebpackPlugin=require('html-webpack-plugin');
const MiniCssExtractPlugin=require('mini-css-extract-plugin');
module.exports={
 mode:"development",
 entry:{
 "common":"./src/js/common.js",
 "index":"./src/js/index.js",
 "login":"./src/js/login.js"
 },
 output:{
 filename:"js/[name].js",
 },
 plugins:[
 new CleanWebpackPlugin(),
 new HtmlWebpackPlugin({
 template:'./src/index.html',
 filename:'index.html',
 chunks:["common","index"],
 hash:true
 }),
 new HtmlWebpackPlugin({
 template:'./src/login.html',
 filename:'login.html',
 chunks:["common","login"],
 hash:true
 }),
 new MiniCssExtractPlugin({
 filename:'css/[name].css',
 chunkFilename:'[id].css'
 })
 ],
 module:{
 rules:[
 // {
 // test:/\.less$/,
 // use:[
 // {loader:"style-loader"},
 // {loader:"css-loader"},
 // {loader:"less-loader"}
 // ]
 // }
 {
 test:/\.less$/,
 use:[
 {
 loader:MiniCssExtractPlugin.loader
 },
 "css-loader",
 "less-loader"
 ]
 },
 ]
 }
}

在webpack.config.js中我们首先定义插件,然后在plugins项中实例化插件(前面讲到了插件需要安装、定义、实例化三步),最后在module中定义处理less的规则,注释掉的部分是讲解loader的时候使用的,没删掉是要做个比较。

plugins项中mini-css-extract-plugin的实例化参数filename其实和output,html-webpack-plugin中定义的filename,完全一样,就是给输出文件起名字(有人可能会说不是在output中定义了吗,其实webpack入口与输出只是js,其他的是靠插件或者loader来处理,所用不要弄混)。

chunkFilename和html-webpack-plugin中的chunk类似,但是后面的[id].css不好理解(实在明白就这样写就行,固化的不会变),其实这个地方没法写实际具体的名字的,因为这是下面的loader中mini-css-extract-plugin插件内部自己产生的。

再来看rules中的定义,我们去掉了style-loader,因为我们不是要把样式写的页面中,我们是希望link单独的css文件。规则的意思就是遇到js中导入的以.less为结尾的文件使用less-loader来处理,然后转换成css,然后让css-loader处理样式内部的一些关于url,或者@import等一些css的问题,然后交给下一个loader,这个时候的loader变成了mini-css-extract-plugin中的loader了,这个laoder就是将css单独提取出来放入页面中,如下图:

二、处理图片资源

页面中有三种图片的引用方式,一种是html页面中的 img标签,一种是样式中类似background:url(),一种是是脚本中创建图片并插入页面的。那么我们就将这三种方式都尝试一下。项目目录如下图:

增加了三个图片,其实就是一个图片就是名字不一样而已。然后分别修改less文件,js文件,html文件,各个文件内容如下:

index.less

index.js

index.html

图片资源的处理有很多loader可以用,这里我们使用url-loader,对于页面中的img标签,我们使用html-withimg-loader。

安装loader:

cnpm install url-loader html-withimg-loader --save-dev

然后配置webpack.config.js:

const { CleanWebpackPlugin }=require('clean-webpack-plugin');
const HtmlWebpackPlugin=require('html-webpack-plugin');
const MiniCssExtractPlugin=require('mini-css-extract-plugin');
module.exports={
 mode:"development",
 entry:{
 "common":"./src/js/common.js",
 "index":"./src/js/index.js",
 "login":"./src/js/login.js"
 },
 output:{
 filename:"js/[name].js",
 },
 plugins:[
 new CleanWebpackPlugin(),
 new HtmlWebpackPlugin({
 template:'./src/index.html',
 filename:'index.html',
 chunks:["common","index"],
 hash:true
 }),
 new HtmlWebpackPlugin({
 template:'./src/login.html',
 filename:'login.html',
 chunks:["common","login"],
 hash:true
 }),
 new MiniCssExtractPlugin({
 filename:'css/[name].css',
 chunkFilename:'[id].css'
 })
 ],
 module:{
 rules:[
 {
 test:/\.less$/,
 use:[
 {
 loader:MiniCssExtractPlugin.loader,
 options:{
 publicPath:"../"
 }
 },
 "css-loader",
 "less-loader"
 ]
 },
 {
 test:/\.(png|svg|jpg|gif)$/,
 use:[
 {
 loader:'url-loader',
 options:{
 limit:10240,
 name:"imgs/[name].[ext]",
 }
 }
 ]
 },
 {
 test:/\.(htm|html)$/,
 use:["html-withimg-loader"]
 }
 ]
 }
}

这里需要注意几点:

第一、minicssextractplugin中添加了一个配置publicPath,为什么不把它放到output中?因为output中的pubicPath会影响所有路径。这里面我们只是想让css-loader处理完css后只解决样式表里的路径问题。

第二、url-loader,limit参数,当图片文件小于10K的时候,将文件转换成dataUrl格式的图片减少链接请求,name参数就是生成的文件名称,当然前面的imgs是dist目录下的imgs文件夹。

第三、遇到html或者htm结尾的文件时使用html-withimg-loader处理里面的图片资源。

前端的模块化开发不建议在页面中直接使用图片链接,要在js中导入图片,但我感觉不太现实,毕竟img标签不是摆设。

接下来运行 npx webpack命令,效果如下:

我们的图片是50多K大小所以dist目录下生成了imgs文件夹,并且将src中的图片考了过来。

如果我们将limit的值改为102400后,图片将直接转换成dataurl格式,不在保存到dist目录下,入下图:

我们可以发现他们的链接地址是有区别的。

三、总结

我们分了五节内容简单的描述了webpack4最基本的一些知识点,主要包括:

1、安装

前提条件安装node

在项目中使用npm init -y,初始化项目,主要是创建了一个package.json的文件,用来记录项目信息以及依赖关系。

为了避免插件或者loader下载不了,介绍了cnpm。

2、入口与输出

webpack.config.jswebpack的配置文件

npx webpack运行webpack的命令

最基本的入口与输出的概念

3、插件

clear-webpack-plugin 清除dist目录的插件

html-webpack-plugin 简化html创建的一个插件,并且关联js

mini-css-extract-plugin 单独提起css为文件的插件

4、加载器(loader)

model模式(开发模式,产品模式)

less-loader、css-loader、style-loader、url-loader、html-withimg-loader

这些知识点只是让初学者快速的跑起来一个webpack,避免踩坑,在实际的项目中遇到问题时可以知道具体知道从哪方面入手来解决问题。

如果内容中有错误,欢迎大家指正。谢谢!