Perl 在 SQLite 中处理图像

使用 PerlSQLite 中处理图像,本章我们将使用图像文件,请注意,有些人反对将图像放入数据库。 在这里,我们只展示如何做。 我们不讨论是否在数据库中保存图像。

sqlite> CREATE TABLE Images(Id INTEGER PRIMARY KEY, Data BLOB);

对于此示例,我们创建一个名为Images的新表。 对于图像,我们使用BLOB数据类型,代表二进制大对象。

插入图像

在第一个示例中,我们将图像插入 SQLite 数据库。

#!/usr/bin/perl

use strict;
use DBI;

my dbh = DBI->connect(             "dbi:SQLite:dbname=test.db",                            { RaiseError => 1 }
) or dieDBI::errstr;

open IMAGE, "mushrooms.jpg" or die !;

my (image, buff);
while(read IMAGE,buff, 1024) {
    image .=buff;
}

my stm =dbh->prepare("INSERT INTO Images(Data) VALUES (?)");
stm->bind_param(1,image, DBI::SQL_BLOB);
stm->execute();

close(IMAGE);stm->finish();
$dbh->disconnect();

我们从当前工作目录中读取图像,并将其写入 SQLite test.db数据库的Images表中。

open IMAGE, "mushrooms.jpg" or die $!;

我们打开一个图像。 这是称为mushrooms.jpg的 JPG 图像。

my (image,buff);
while(read IMAGE, buff, 1024) {image .= $buff;
}

我们从图像文件读取二进制数据。

my sth =dbh->prepare("INSERT INTO Images(Data) VALUES (?)");
sth->bind_param(1,image, DBI::SQL_BLOB);
$sth->execute();

三行代码准备 SQL 语句,将图像数据绑定到该语句并执行它。

close(IMAGE);
sth->finish();dbh->disconnect();

最后,我们正在释放资源。

读取图像

在本节中,我们将执行相反的操作。 我们将从数据库表中读取图像。

#!/usr/bin/perl

use strict;
use DBI;

my dbh = DBI->connect(             "dbi:SQLite:dbname=test.db",                       { RaiseError => 1 }
) or dieDBI::errstr;

my stm =dbh->prepare("SELECT Data FROM Images WHERE Id=1");
stm->execute();
myimage = stm->fetch();

print "Image:image";

open IMAGE, ">mushrooms2.jpg" or die !;
print IMAGE @image;
close(IMAGE);

stm->finish();dbh->disconnect();

我们从“图像”表中读取图像数据,并将其写入另一个文件,我们称为蘑菇 2.jpg。

my sth =dbh->prepare("SELECT Data FROM Images WHERE Id=1");
sth->execute();
myimage = $sth->fetch();

这三行从表中选择图像数据。

open IMAGE, ">mushrooms2.jpg" or die !;
print IMAGE @image;
close(IMAGE);

我们打开一个新的图像文件,并将检索到的数据写入该文件。 然后我们关闭文件。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程