如何简单地利用Bitmap为中介储存图片到数据库中
这是我的第一篇博文,请大家多多指教!
大概一个月之前,在跟朋友合作开发一个APP的过程中,我们发现到一个问题:图片的存储。因为数据库没有图片这种数据类型,当用户上传的图片需要存储的时候,我们无法将其直接放进数据库中。
在经历了几天的探索,结合郭神的《第二行代码》调用摄像头拍照以及从相册中选择图片这两小节,我们发现了Android里面的一个图片类:Bitmap。最终发现,利用Bitmap及其相关的工具类即可实现图片的存储以及显示。
主要用到的工具类:
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Base64;
import java.io.ByteArrayOutputStream;
/**
* Created by cartoon on 2017/12/9.
*/
public class StringAndBitmap {
//图片与String之间的转换,便于将图片存储在数据库中
private Bitmap bitmap;
private String string;
public Bitmap stringToBitmap(String string){
//数据库中的String类型转换成Bitmap
if(string!=null){
byte[] bytes= Base64.decode(string,Base64.DEFAULT);
bitmap= BitmapFactory.decodeByteArray(bytes,0,bytes.length);
return bitmap;
}
else {
return null;
}
}
public String bitmapToString(Bitmap bitmap){
//用户在活动中上传的图片转换成String进行存储
if(bitmap!=null){
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bytes = stream.toByteArray();// 转为byte数组
string=Base64.encodeToString(bytes,Base64.DEFAULT);
return string;
}
else{
return "";
}
}
}
下面已经获取到数据库中已经存储了的图片的String语句string,只需要在需要显示图片的组件中调用关于显示Bitmap的方法即可。
imageView.setImageBitmap(stringAndBitmap.stringToBitmap(string);
//这里的imageView为页面组件绑定的ID,string为从数据库获取到图片的string形态
而存储用户上传的图片则需要这样即可。
bitmap=((BitmapDrawable)imageView.getDrawable()).getBitmap();
string=stringAndBitmap.bitmapToString(bitmap);
经过一些数据库的操作,即可以把用户上传的图片存入到数据库中。
因为数据库部分不是我负责的,所以我的建议是数据库中的类型选择BLOB(MySQL),因为已经实现过是可行的。
以上就是之前开发的一点小技巧,也是经过痛才领会出来的。我们还没有测试过资源的消耗以及延时的情况,但确实是可以存储图片到数据库中的。
如果你们有任何对这篇博文的建议或者意见的话,欢迎私信或者在下方评论。最重要的是可以帮助到像我们一样的入门者。
如何简单地利用Bitmap为中介储存图片到数据库中的更多相关文章
- 控制台程序实现利用CRM组织服务和SqlConnection对数据库中数据的增删改查操作
一.首先新建一个控制台程序.命名为TestCol. 二.打开App.config在里面加入,数据库和CRM连接字符串 <connectionStrings> <add name=&q ...
- Android下利用Bitmap切割图片
在自己自定义的一个组件中由于需要用图片显示数字编号,而当前图片就只有一张,上面有0-9是个数字,于是不得不考虑将其中一个个的数字切割下来,需要显示什么数字,只需要组合一下就好了. 下面是程序的关键代码 ...
- 一个简单的利用 WebClient 异步下载的示例(三)
继续上一篇 一个简单的利用 WebClient 异步下载的示例(二) 后,继续优化它. 1. 直接贴代码了: DownloadEntry: public class DownloadEntry { p ...
- 一个简单的利用 WebClient 异步下载的示例(二)
继上一篇 一个简单的利用 WebClient 异步下载的示例(一) 后,我想把核心的处理提取出来,成 SkyWebClient,如下: 1. SkyWebClient 该构造函数中 downloadC ...
- 一个简单的利用 WebClient 异步下载的示例(一)
继上一篇文章 一个简单的利用 HttpClient 异步下载的示例 ,我们知道不管是 HttpClient,还算 WebClient,都不建议每次调用都 new HttpClient,或 new We ...
- 一个简单的利用 HttpClient 异步下载的示例
可能你还会喜欢 一个简单的利用 WebClient 异步下载的示例 ,且代码更加新. 1. 定义自己的 HttpClient 类. using System; using System.Collec ...
- 在MaxCompute中利用bitmap进行数据处理
很多数据开发者使用bitmap技术对用户数据进行编码和压缩,然后利用bitmap的与/或/非的极速处理速度,实现类似用户画像标签的人群筛选.运营分析的7日活跃等分析.本文给出了一个使用MaxCompu ...
- zabbix利用自带的模板监控mysql数据库
zabbix利用自带的模板监控mysql数据库 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 有些东西你不会的时候觉得它特别难,但是当你去做的时候就发现如此的简单~zabbix功能 ...
- .NET 利用反射将对象数据添加到数据库
.NET 利用反射将对象数据添加到数据库 一些小型的项目,在不使用其他的框架(LINQ,NHibernate,EF等等框架)的前提下,这时候一些反复的增删改查就会让我们感到极其的繁琐,厌烦,为了避 ...
随机推荐
- sentinel 核心概念
编者注:前段时间笔者在团队内部分享了sentinel原理设计与实现,主要讲解了sentinel基础概念和工作原理,工作原理部分大家听了基本都了解了,但是对于sentinel的几个概念及其之间的关系还有 ...
- asp.net core 系列之Startup
这篇文章简单记录 ASP.NET Core中 ,startup类的一些使用. 一.前言 在 Startup类中,一般有两个方法: ConfigureServices 方法: 用来配置应用的 servi ...
- 高并发 Nginx+Lua OpenResty系列(5)——Lua开发库Redis
Redis客户端 lua-resty-redis是为基于cosocket API的ngx_lua提供的Lua redis客户端,通过它可以完成Redis的操作.默认安装OpenResty时已经自带了该 ...
- vue路由传参query和params的区别(详解!)
1.query使用path和name传参都可以,而params只能使用name传参. query传参: 页面: this.$router.push({ path:'/city',name:'City' ...
- Python自学day-15
一.防止页面变形 在改变浏览器大小时,可能会导致里面的元素变形(特别是用百分比设置的宽度). 那么,我们如何解决这个问题? 可以在最外层的元素(例如div)中,设置一个固定像素的宽度,例如: < ...
- Scala 学习之路(七)—— 常用集合类型之 Map & Tuple
一.映射(Map) 1.1 构造Map // 初始化一个空map val scores01 = new HashMap[String, Int] // 从指定的值初始化Map(方式一) val sco ...
- 如何用css实线所需要的小三角
使用css实现三角符号 关于使用css制作三角符号,网上有很多的例子了,在这里只是为了详细的向各位解释一下三角符号的原理 下图,是一个长宽为100px,边框宽度为100px的一个元素,由此可见,在cs ...
- 32| 无实例无真相:基于LoadRunner实现企业级服务器端性能测试的实践(上)
- Nginx添加Lua扩展模块
Nginx添加Lua扩展模块 编译安装LuaJIT wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz tar xf LuaJIT-.tar.gz ...
- vue中局部组件的使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...