美文网首页
如何简单地利用Bitmap为中介储存图片到数据库中

如何简单地利用Bitmap为中介储存图片到数据库中

作者: cartoony | 来源:发表于2019-05-05 09:55 被阅读0次

        这是我的第一篇博文,请大家多多指教!
        大概一个月之前,在跟朋友合作开发一个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为中介储存图片到数据库中

          本文链接:https://www.haomeiwen.com/subject/xofcoqtx.html