精华内容
下载资源
问答
  • Android数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型)。...个人倾向于使用数据库存取图片,因为个人认为存到数据库里的数据不会因
  • 主要为大家详细介绍了ASP.NET数据库如何存取图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 数据库存储图片作业
  • 通过对数据库如何存取图片的研究,提出在.Net平台下基于Web的SQL Server数据库存取图片的优化算法,该算法能有效优化图片大小,节省数据库容量,不占用服务器空间,减少服务器的响应时间,提高网页中的图片加载速度...
  • 第一种方式文件夹与数据库配合近来做了不少关于这块的功能,随着网络的飞速发展,网络存取图片已不再是神话,而成为了一种时尚,如果是你是用Asp.net开发的话,可能更多的人会考虑使用数据库存储图片的路经,而在...
  • 数据库存取图片方式

    千次阅读 2018-05-02 14:40:44
    转载于 http://www.cnblogs.com/sufei/archive/2010/09/24/1834054.html第一种方式 文件夹与数据库配合 近来做了不少关于这块的功能 ,随着网络的飞速发展,网络存取图片已不再是神话,而成为了一种时尚,如果是...

    转载于 http://www.cnblogs.com/sufei/archive/2010/09/24/1834054.html

    第一种方式   文件夹与数据库配合


            近来做了不少关于这块的功能 ,随着网络的飞速发展,网络存取图片已不再是神话,而成为了一种时尚,如果是你 是用Asp.net开发的话,可能更多的人会考虑使用数据库存储图片的路经,而在文件夹是存储图片的方式。这种方式主要的方法有两个一个就是怎么样读取图片,怎么样存储图上,读取的话我就不多说的这个是最简单的了,只要大家把地址=给存储图片的对象就行了,在取的时候一般要使用相对地址也就是“~” 如下所示

     

     

    ImageUrl="../CardDeal/SellCardZhi.jpg' 
    ImageUrl="~/CardDeal/SellCardZhi.jpg' 

     

     

    当然这前面要加上你自己的图片所在服务器的文件夹的名称

    我们来看是一下是怎么存储的吧,我常用的一个方法是这样的

     

    复制代码
      ///   <summary>
        
    ///  上传图片
        
    ///   </summary>
        
    ///   <param name="FUSShopURL"> FileUpload对象 </param>
        
    ///   <param name="UpladURL"> 图片要放到的目录名称 </param>
        
    ///   <returns> 如果FileUpload不为空则返回上传后的图片位置,否则返回为空字符 </returns>
         public    static    string   uploadImage(FileUpload FUSShopURL,  string  UpladURL)
        {
            
    if  (FUSShopURL.HasFile)
            {
                
    // 获取当前的时间,一当作图片的名字
                 string  fileName  =  DateTime.Now.ToString( " yyyyMMddhhmmss " +  DateTime.Now.Millisecond.ToString();
                
    // 获取图片的扩展名
                 string  Extent  =  System.IO.Path.GetExtension(FUSShopURL.PostedFile.FileName);
                
    // 重命名图片
                fileName  +=  Extent;
                
    // 设置上传图片保存的文件夹
                 string  dir  =  System.Web.HttpContext.Current.Server.MapPath(UpladURL);
                
    // 指定图片的路径及文件名
                 string  path  =  dir  +   " \\ "   +  fileName;
                
    // 把上传得图片保存到指定的文件加中
                FUSShopURL.PostedFile.SaveAs(path);
                
    return   fileName;
            }
            
    else
            {
                
    return   "" ;
            }
        }
    复制代码

     

    这个方法是与FileUpload控件 一起使用的,方法很简单大家一看就明白了。

    方法返回的就是一个相对的路经可以直接存储的数据里,然后从前台调用就可以了

     

    第二种方式    直接把图片的Base64String码进行存取


     

              这种方法很方便,直接转化一下就行了,不需要书写很麻烦的路经问题

    先看一下是怎么存储到数据库的吧

            

    复制代码
    // 选择图片
             private   void  button1_Click( object  sender, EventArgs e)
            {
                OpenFileDialog openfile 
    =   new  OpenFileDialog();
                openfile.Title 
    =   " 请选择客户端longin的图片 " ;
                openfile.Filter 
    =   " Login图片(*.jpg;*.bmp;*png)|*.jpeg;*.jpg;*.bmp;*.png|AllFiles(*.*)|*.* " ;
                
    if  (DialogResult.OK  ==  openfile.ShowDialog())
                {
                    
    try
                    {
                        Bitmap bmp 
    =   new  Bitmap(openfile.FileName);
                        pictureBox1.Image 
    =  bmp;
                        pictureBox1.SizeMode 
    =  PictureBoxSizeMode.Zoom;
                        MemoryStream ms 
    =   new  MemoryStream();
                        bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                        
    byte [] arr  =   new   byte [ms.Length];
                        ms.Position 
    =   0 ;
                        ms.Read(arr, 
    0 , ( int )ms.Length);
                        ms.Close();
                        
    // 直接返这个值放到数据就行了
                        pic  =  Convert.ToBase64String(arr);
                    }
                    
    catch  { }
                }
            }
    复制代码

     

       读取的方法也很简单, pic就是我们得到的图片字符串只要我们存储到数据库里,从下面的方法里读取就可以了

    需要注意的地方我都加的有注释

     

    复制代码
    // 加载图片
             private   void  Form1_Load( object  sender, EventArgs e)
            {
                
    try
                {
                   // pic=........这一句换成从数据库里读取就可以了
                    
    // 判断是否为空,为空时的不执行
                     if  ( ! string .IsNullOrEmpty(pic))
                    {
                        
    // 直接返Base64码转成数组
                         byte [] imageBytes  =  Convert.FromBase64String(pic);
                        
    // 读入MemoryStream对象
                        MemoryStream memoryStream  =   new  MemoryStream(imageBytes,  0 , imageBytes.Length);
                        memoryStream.Write(imageBytes, 
    0 , imageBytes.Length);
                        
    // 转成图片
                        Image image  =  Image.FromStream(memoryStream);

                        
    // memoryStream.Close(); // 不要加上这一句否则就不对了

                        
    //  将图片放置在 PictureBox 中
                         this .pictureBox1.SizeMode  =  PictureBoxSizeMode.Zoom;
                        
    this .pictureBox1.Image  =  image;
                    }
                }
                
    catch  { }
            }
    复制代码

     

     

              大家看一下效果吧

     

     

     

    在这里我们只要单击选择图片直接就可以更换。这些很简单但是我个人感觉还是很常用的,而且网上关于这块的例子着实不少,不过真正能帮上忙的还真不多,因为我们的好几个项目里用到了这些方法,或多或少的还是有些员工不怎么会, 在这里贴一贴方便新手查看吧。呵呵

    下面的本例子的所有代码

     

    复制代码
    using  System;
    using  System.Collections.Generic;
    using  System.ComponentModel;
    using  System.Data;
    using  System.Drawing;
    using  System.Linq;
    using  System.Text;
    using  System.Windows.Forms;
    using  System.IO;
    using  System.Threading;

    namespace  WindowsFormsApplication1
    {
        
    public   partial   class  Form1 : Form
        {
            
    public  Form1()
            {
                InitializeComponent();
            }

            
    string  pic  =   "" ;
            
    // 加载图片
             private   void  Form1_Load( object  sender, EventArgs e)
            {
                
    try
                {
                    
    if  ( ! string .IsNullOrEmpty(pic))
                    {
                        
    byte [] imageBytes  =  Convert.FromBase64String(pic);
                        MemoryStream memoryStream 
    =   new  MemoryStream(imageBytes,  0 , imageBytes.Length);
                        memoryStream.Write(imageBytes, 
    0 , imageBytes.Length);
                        Image image 
    =  Image.FromStream(memoryStream);

                        
    //  将图片放置在 PictureBox 中
                         this .pictureBox1.SizeMode  =  PictureBoxSizeMode.Zoom;
                        
    this .pictureBox1.Image  =  image;
                    }
                }
                
    catch  { }
            }

            
    // 选择图片
             private   void  button1_Click( object  sender, EventArgs e)
            {
                OpenFileDialog openfile 
    =   new  OpenFileDialog();
                openfile.Title 
    =   " 请选择客户端longin的图片 " ;
                openfile.Filter 
    =   " Login图片(*.jpg;*.bmp;*png)|*.jpeg;*.jpg;*.bmp;*.png|AllFiles(*.*)|*.* " ;
                
    if  (DialogResult.OK  ==  openfile.ShowDialog())
                {
                    
    try
                    {
                        Bitmap bmp 
    =   new  Bitmap(openfile.FileName);
                        pictureBox1.Image 
    =  bmp;
                        pictureBox1.SizeMode 
    =  PictureBoxSizeMode.Zoom;
                        MemoryStream ms 
    =   new  MemoryStream();
                        bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                        
    byte [] arr  =   new   byte [ms.Length];
                        ms.Position 
    =   0 ;
                        ms.Read(arr, 
    0 , ( int )ms.Length);
                        ms.Close();
                        pic 
    =  Convert.ToBase64String(arr);
                    }
                    
    catch  { }
                }
            }
        }
    }
    复制代码

     

    第三种方式   读成二进制后进行存取


     

     

       先把图片读成二进制以后再做处理,这样快捷而且代码相对少很多,还有就是感谢下面几位网友的提醒和建议,在这里我把我简单写的代码贴一下,怎么样存储到数据库的方法还是大家自己写我只提供存取的方法

     

    复制代码
        private   void  button1_Click( object  sender, EventArgs e)
            {
                OpenFileDialog openfile 
    =   new  OpenFileDialog();
                openfile.Title 
    =   " 请选择客户端longin的图片 " ;
                openfile.Filter 
    =   " Login图片(*.jpg;*.bmp;*png)|*.jpeg;*.jpg;*.bmp;*.png|AllFiles(*.*)|*.* " ;
                
    if  (DialogResult.OK  ==  openfile.ShowDialog())
                {
                    
    try
                    {
                        
    // 读成二进制
                         byte [] bytes  =  File.ReadAllBytes(openfile.FileName);
                        
    // 直接返这个存储到数据就行了cmd.Parameters.Add("@image", SqlDbType.Image).Value = bytes;

                        
    // 输出二进制  在这里把数据中取到的值放在这里byte[] bytes=(byte[])model.image;
                        pictureBox1.Image  =  System.Drawing.Image.FromStream( new  MemoryStream(bytes));
                        
    this .pictureBox1.SizeMode  =  PictureBoxSizeMode.Zoom;

                        
    //  如果保存成文件:
                        File.WriteAllBytes( @" d:\text.jpg " , bytes);
                    }
                    
    catch  { }
                }
            }
    复制代码
    展开全文
  • 基于Web的SQL Server数据库存取图片的Delphi实现.pdf
  • Android 数据库存取图片

    千次阅读 2018-11-19 09:28:05
    存储完图片要将这段代码注释掉,再运行,从数据库取出图片。不然会反复的存图片数据库。 activity_main2.xml xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" ...

    参考:http://blog.sina.com.cn/s/blog_8cfbb99201012oqn.html

    MySQLiteOpenHelper
    package com.example.administrator.taiyang;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    
    /**
     * Created by Administrator on 2018/11/5.
     */
    
    public class MySQLiteOpenHelper extends SQLiteOpenHelper {
        // 重写构造方法
        public MySQLiteOpenHelper(Context context, String name,
                                  SQLiteDatabase.CursorFactory cursor, int version) {
            super(context, name, cursor, version);
        }
    
        // 创建数据库的方法
        public void onCreate(SQLiteDatabase db) {
    // 创建一个数据库,表名:imagetable,字段:_id、image。
            db.execSQL("CREATE TABLE imagetable (_id INTEGER PRIMARY KEY AUTOINCREMENT,image BLOB)");
        }
    
        // 更新数据库的方法
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    
        }
        }
    package com.example.administrator.myapplication;
    
    import android.content.ContentValues;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.ImageView;
    
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    
    public class Main2Activity extends AppCompatActivity {
    
        private MySQLiteOpenHelper mySQLiteOpenHelper;
        SQLiteDatabase mydb;
        ImageView iv1;
        Bitmap imagebitmap;
        String id="1";//赋值1,2,3...,分别是第一,第二,第三张图片...
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
            iv1 = (ImageView) findViewById(R.id.imageView1);
            try {
                a();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        private void a() throws IOException {
            // 创建助手类的实例
            // CursorFactory的值为null,表示采用默认的工厂类
            mySQLiteOpenHelper = new MySQLiteOpenHelper(this, "saveimage.db", null, 1);
            // 创建一个可读写的数据库
            mydb = mySQLiteOpenHelper.getWritableDatabase();
    
            //将图片转化为位图
            Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.d);
            //创建一个字节数组输出流,流的大小为size
            int size = bitmap1.getWidth() * bitmap1.getHeight() * 4;
            ByteArrayOutputStream baos = new ByteArrayOutputStream(size);
            //设置位图的压缩格式,质量为100%,并放入字节数组输出流中
            bitmap1.compress(Bitmap.CompressFormat.PNG, 100, baos);
           //将字节数组输出流转化为字节数组byte[]
            byte[] imagedata1 = baos.toByteArray();
            Log.d("a","1:"+imagedata1);
    
            //将字节数组保存到数据库中
            ContentValues cv = new ContentValues();
                cv.put("_id", 1);
                cv.put("image", imagedata1);
                mydb.replace("imagetable", null, cv);
    
            //关闭字节数组输出流
            baos.close();
    
            //创建一个指针
            Cursor cur = mydb.query("imagetable", new String[]{"_id", "image"}, "_id like ?", new String[]{id}, null, null, null);
    
            byte[] imagequery =null;
            while(cur.moveToNext()) {
                int id =cur.getInt(cur.getColumnIndex("_id"));
                imagequery=cur.getBlob(cur.getColumnIndex("image"));//将Blob数据转化为字节数组
             
                //将字节数组转化为位图
                imagebitmap = BitmapFactory.decodeByteArray(imagequery, 0, imagequery.length);
              
                //将位图显示为图片
                iv1.setImageBitmap(imagebitmap);
            }
            cur.close();
    
        }
    }

     

            //将图片转化为位图
            Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.d);
            //创建一个字节数组输出流,流的大小为size
            int size = bitmap1.getWidth() * bitmap1.getHeight() * 4;
            ByteArrayOutputStream baos = new ByteArrayOutputStream(size);
            //设置位图的压缩格式,质量为100%,并放入字节数组输出流中
            bitmap1.compress(Bitmap.CompressFormat.PNG, 100, baos);
           //将字节数组输出流转化为字节数组byte[]
            byte[] imagedata1 = baos.toByteArray();
            Log.d("a","1:"+imagedata1);

            //将字节数组保存到数据库中
            ContentValues cv = new ContentValues();
                cv.put("_id", 1);
                cv.put("image", imagedata1);
                mydb.replace("imagetable", null, cv);

            //关闭字节数组输出流
            baos.close();

    存储完图片要将这段代码注释掉,再运行,从数据库取出图片。不然会反复的存图片到数据库。

    activity_main2.xml

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        xmlns:attr="http://schemas.android.com/apk/res-auto">  
    
            <ImageView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:id="@+id/imageView1"/>
    
    
    </LinearLayout>
    

     

    展开全文
  • android开发之数据库存取图片

    千次阅读 2018-07-31 10:48:57
    Android数据库存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型)。对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢迎,他们认为,在很...

    Android数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型)。对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢迎,他们认为,在很多数据库语言里,处理大字段都是不容易的,像图片这样的文件放在数据库里会有问题:对数据库的读写速度永远赶不上文件系统的处理速度,使数据库变得巨大;但也有很多人认为像图片这样的数据存放在数据库中也有好处:易于备份,且备份速度绝对比备份文件快,比较容易数据迁移等等。其实这两种方法都有优缺点,具体使用哪种方法要视情况而定。个人倾向于使用数据库存取图片,因为个人认为存到数据库里的数据不会因外部数据的变化而丢失改变,比如你拍照获得一张图片,如果是将路径存到数据库,当这张照片被删除之后,下次读取数据库就得不到想要的结果了。接下来详细介绍数据库存取图片的方法:

      1.从资源中获取Bitmap对象

    Resources res = getResources();

    Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.icon);

    2.把图片转换成字节

    public byte[] img(int id)
    {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(id)).getBitmap();
         bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
         return baos.toByteArray();
    }

    3.在数据库中插入图片

    //在数据库创建时,图片字段的数据类型存储为 BLOB数据库插入操作
    public void onCreate(SQLiteDatabase db)
    {
        String sql = "create table " + TB_NAME + " ( " + ID + " integer primary key , " + IMAGE + " BLOB ) ";
        db.execSQL(sql);
    }

    //将图片一字节形式存储数据库读取操作
    public long insert(byte[] img)
    {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put(IMAGE, img);
        long result = db.insert(TB_NAME, null, cv);
        return result;
    }

    4.获取存入数据库的图片(Bitmap)

    public Bitmap getBmp(int position)
    {
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = select(TB_NAME);
        cursor.moveToPosition(position);
        byte[] in = cursor.getBlob(cursor.getColumnIndex(IMAGE));
        Bitmap bmpout = BitmapFactory.decodeByteArray(in, 0, in.length);
        return bmpout;
    }

    //imgView.setImageBitmap(bm);

    5.转换获取的图片(Bitmap)为Drawable

    public Drawable chage_to_drawable(Bitmap bp)
    {
        //因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。
        Bitmap bm=bp;
        BitmapDrawable bd= new BitmapDrawable(getResource(), bm);
        return bd;
    }

    Android图片二进制与Bitmap、Drawable之间的转换

    Java代码  
    public byte[] getBitmapByte(Bitmap bitmap){  
       ByteArrayOutputStream out = new ByteArrayOutputStream();  
       bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);  
       try {  
           out.flush();  
           out.close();  
       } catch (IOException e) {  
           e.printStackTrace();  
       }  
       return out.toByteArray();  
    }  


    public Bitmap getBitmapFromByte(byte[] temp){  
       if(temp != null){  
           Bitmap bitmap = BitmapFactory.decodeByteArray(temp, 0, temp.length);  
           return bitmap;  
       }else{  
           return null;  
       }  
    }  

    public byte[] getBitmapByte(Bitmap bitmap){
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
    try {
    out.flush();
    out.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    return out.toByteArray();
    }

    public Bitmap getBitmapFromByte(byte[] temp){
    if(temp != null){
    Bitmap bitmap = BitmapFactory.decodeByteArray(temp, 0, temp.length);
    return bitmap;
    }else{
    return null;
    }
    }

    Java代码  
    public static Bitmap drawableToBitmap(Drawable drawable){    
               int width = drawable.getIntrinsicWidth();    
               int height = drawable.getIntrinsicHeight();    
               Bitmap bitmap = Bitmap.createBitmap(width, height,    
                       drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888    
                               : Bitmap.Config.RGB_565);    
               Canvas canvas = new Canvas(bitmap);    
               drawable.setBounds(0,0,width,height);    
               drawable.draw(canvas);    
               return bitmap;    
           }    

    public static Bitmap drawableToBitmap(Drawable drawable){  
               int width = drawable.getIntrinsicWidth();  
               int height = drawable.getIntrinsicHeight();  
               Bitmap bitmap = Bitmap.createBitmap(width, height,  
                       drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888  
                               : Bitmap.Config.RGB_565);  
               Canvas canvas = new Canvas(bitmap);  
               drawable.setBounds(0,0,width,height);  
               drawable.draw(canvas);  
               return bitmap;  
           }  

    Java代码  
    Drawable drawable = new FastBitmapDrawable(bitmap); 
     

     

     

    展开全文
  • 【python3】 sqlite3操作SQLite数据库存取图片1.背景2.code3.运行结果 1.背景 SQLite 原生支持如下的类型: NULL,INTEGER,REAL,TEXT,BLOB。 因此可以将以下Python类型发送到SQLite而不会出现任何问题: 这是...

    【python3】 sqlite3操作SQLite数据库存取图片

    1.背景

    SQLite 原生支持如下的类型: NULL,INTEGER,REAL,TEXT,BLOB。
    因此可以将以下Python类型发送到SQLite而不会出现任何问题:
    在这里插入图片描述
    这是SQLite类型默认转换为Python类型的方式:
    在这里插入图片描述
    sqlite3 模块的类型系统可通过两种方式来扩展(本博文不涉及):你可以通过对象适配将额外的 Python 类型保存在 SQLite 数据库中,你也可以让 sqlite3 模块通过转换器将 SQLite 类型转换为不同的 Python 类型。

    本博文
    1.1 将读取图片二进制数据(bytes字节码)进行base64编码(仍然为bytes字节码),然后存到SQLite数据库。(将python的字节码要想存进SQLite数据库,对应的是上述BLOB的SQLite 类型。)
    1.2 并从SQLite数据库读取图片的字节码,并转化opencv的数据类型;

    2.code

    #1.SQlite原生类型:BLOB对应python的bytes字节码
    '''
    date:2020.11.23
    author:jn10010537
    python3使用sqlite3保存图片以及从数据读取图片
    '''
    import sys
    import sqlite3
    import base64
    import cv2
    import numpy as np
    print("python版本:",sys.version)#3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)]
    print("sqlite3模块的版本号:",sqlite3.version)#2.6.0
    print("sqlite3模块的版本号,元组:",sqlite3.version_info)#(2, 6, 0)
    print("使用中的 SQLite 库的版本号:",sqlite3.sqlite_version)#3.21.0
    
    #1.打开数据库,获得连接对象
    conn=sqlite3.connect("jn10010537.db")
    #2.获得数据库的操作游标
    c=conn.cursor()
    #3.创建数据表
    # 如果不存在数据表就创建
    # 数据表名pictureTable,
    # 字段:picName,width,height,image_bytes
    symbol = 'pictureTable'
    try:
        c.execute('create table IF NOT EXISTS %s(picName TEXT,width INTEGER, height INTEGER, image_bytes BLOB)'%symbol)
        #提交到数据库
        conn.commit()
        pass
    except Exception as e:
        print(e)
        print("Create table failed")
    
    # #4.打开图片编码成base64的字节码后存入
    Pic_byte=None
    with open('test.png', 'rb') as f:
         Pic_byte=f.read()
         print("数据类型:",type(Pic_byte))
         #字节码进行编码
         content = base64.b64encode(Pic_byte)
         print("数据类型:",type(content))
         #插入图片的二进制数据
         sql = f"INSERT INTO pictureTable (picName,width, height, image_bytes) VALUES (?,?,?,?);"
         #使用?占位符,是安全的sql语句
         c.execute(sql, ('test.png', 418, 412,content))
         conn.commit()
    #5.读取数据库的图片数据
    cursor = conn.cursor()
    sql = f"SELECT image_bytes FROM pictureTable WHERE picName=?"
    cursor.execute(sql,('test.png',))
    value = cursor.fetchone()
    print("value类型:",type(value))
    if value:
        #base64编码对应的解码(解码完字符串)
        str_encode=base64.b64decode(value[0])
        print("判断解码完和之前存入的十六进制字节码是否一致:",str_encode==Pic_byte)
        # 将open方法读取的字节码转为opencv格式的数据
        nparr = np.fromstring(str_encode, np.uint8)
        img_decode = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
        '''
        或者采取如下方法:
        nparr = np.asarray(bytearray(str_encode), dtype="uint8")
        img_decode = cv2.imdecode(nparr, cv2.IMREAD_COLOR)    
        '''
        cv2.imshow("img",img_decode)
        cv2.waitKey(0)
    

    3.运行结果

    在这里插入图片描述
    同时生成了jn10010537.db数据库文件,分别查看jn10010537.db的属性,以及被读取的图片属性如下:
    在这里插入图片描述
    在这里插入图片描述

    即base64编码是可以降低图片的存储大小的。(只是比png图片储存占用大了一点,远远小于168KiB)

    展开全文
  • 一、配置模块 ...可以用多种方法加载图片数据,保存入数据库 七、查询数据 取得图片数据,分别显示出来 八、演示效果 本文为转载文章,原文地址:点击阅读原文 本文对应案例源码下载:点击下载案例源码 ...
  • PB9数据库存取图片

    2016-07-22 16:01:53
    PB9数据库存取图片,可以把图片存入sql数据库,再用pb读取到本地文件夹中
  • 数据库存取图片

    2014-11-23 16:33:25
    实现往SQLServer数据库存入图片和提取图片的功能。
  • 数据库存取图片

    2015-11-27 11:26:33
    数据库存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型)。对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢迎,他们认为,在很多...
  • 利用数据库存取图片,利用数据库存取图片,从数据库读取显示出来不是简单的保存上传图片的路径.
  • qt数据库存取图片

    2021-02-19 19:24:17
    数据库类型blob 存: QByteArray byteArry; QPixmap pix; QBuffer buffer(&byteArry); buffer.open(QIODevice::WriteOnly); pix.save(&buffer, "png", 0); 取: QPixmap headPic; headPic....
  • 数据库存取图片信息,有两种方式:1)转换成二进制数据存储,故首先设置对应的数据字段数据类型为Blob.2)服务器设置路径保存上传文件,数据库中只存储文件路径。这里采用第一种方式简单示范如何存储并取出图片。涉及...
  • Androidsqlite数据库存取图片信息 存储图片:bitmap private byte[] getIconData(Bitmap bitmap){ int size = bitmap.getWidth()*bitmap.getHeight()*4; ByteArrayOutputStream out = new ...
  • java对sql数据库存取图片代码的简单示例。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,865
精华内容 12,746
关键字:

数据库存取图片