如何简单地利用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等等框架)的前提下,这时候一些反复的增删改查就会让我们感到极其的繁琐,厌烦,为了避 ...
随机推荐
- Java集合 LinkedList的原理及使用
Java集合 LinkedList的原理及使用 LinkedList和ArrayList一样是集合List的实现类,虽然较之ArrayList,其使用场景并不多,但同样有用到的时候,那么接下来,我们来 ...
- Laravel ---【转】PhpStorm下Laravel代码智能提示
[转]http://blog.csdn.net/pangchengyong0724/article/details/54706775 第一步:在项目的composer.json中添加如下一行 &quo ...
- never下ioc
生命周期 当前分单例,作用域(范围),短暂.单例是整个服务中只有一个实例,短暂则是每一次得到的都是新的实例,作用域就是在该一套行动中内得到的是同一个实例,该行动中指的是什么?我们看看demo下的sta ...
- Springboot 连接 使用 Redis Example
通过一个简单的例子使用Springboot 连接并使用Redis. 本文假设已经安装好Redis. 1.首先将URL转换为一个ID ,并使用 StringRedisTemplate 将ID 和 URL ...
- 简单的python爬虫实例
目标网站:https://www.quanjing.com/category/1286521/2.html 爬取搜索出来的所有“中东人”的图片: 先看一下源代码,找到存放图片链接的地方,在源代码最下面 ...
- HBase Region重点剖析
Region的概念 Region是HBase数据管理的基本单位.数据的move,数据的balance,数据的split,都是按照region来进行操作的. region中存储这用户的真实数据,而为了管 ...
- BZOJ 3295:[Cqoi2011]动态逆序对(三维偏序 CDQ分治+树状数组)
http://www.lydsy.com/JudgeOnline/problem.php?id=3295 题意:简单明了. 思路:终于好像有点明白CDQ分治处理三维偏序了.把删除操作看作是插入操作,那 ...
- SQL系统优化
1 系统优化介绍 在我们的项目中,由于客户的使用时间较长或客户的数据量大,造成系统运行速度慢,系统性能下降就容易造成数据库阻塞.这是个非常痛苦的事情,用户的查询.新增.修改等需要花很多时间,甚至造成系 ...
- 看看大神 Paul Graham 对如何学习编程的回答
前言 我翻阅自己之前写的博客文章,发现在 2015 年我刚开始学习编程的时候,翻译了一段 Paul Graham 关于"How can I learn to program?"的回 ...
- springboot配置文件外置处理
前言: 在springboot项目中,一般的配置文件都在resource/config下面,它可以以两种方式存在,一种是yml,一种是properties方式. 当运维和开发分开的时候,比如连接mys ...