スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Image::Imlib2で画像のrawデータを取得できるようにする

Image::Imlib2のソースImlib2.xsに少し変更を加えてビルド&インストールし直せばいい。

# vi lib/Image/Imlib2.xs

で、
MODULE = Image::Imlib2          PACKAGE = Image::Imlib2         PREFIX= Imlib2_

の下辺りに↓を追加。
void
Imlib2_get_data(image)
Image::Imlib2 image

PROTOTYPE: $

PPCODE:
{
DATA32 *blob;
int width;
int height;

imlib_context_set_image(image);

width = imlib_image_get_width();
height = imlib_image_get_height();
blob = imlib_image_get_data_for_reading_only();

EXTEND(SP, 1);
PUSHs(sv_2mortal(newSVpv((const char *)blob, width * height * sizeof(DATA32))));
}


あとは前回の通りImage::Imlib2をビルド&インストール。

ビルド↓

# perl Makefile.PL PREFIX=/usr
# make

インストール↓

# make install
または
# checkinstall --inspect
# rpm -ivh /usr/src/redhat/RPMS/x86_64/Image-Imlib2-2.03-1.x86_64.rpm

これでPerlから

my $img = Image::Imlib2->load('hoge.jpg');
my $blob = $img->get_data;

みたいにして$blobにrawデータを取得できるようになるはず。

ただし、圧縮したjpegそのものではなくてあくまでraw。

Imlib2はロード時に解凍、セーブ時に圧縮する仕様っぽく、Image::MagickのImageToBlobみたいにjpegそのままをメモリに受け渡すのはできないみたい。

この記事のトラックバックURL

http://ysmt.blog21.fc2.com/tb.php/306-c6a07c48

コメント

コメントする

管理者にだけ表示を許可する

Template Designed by DW99

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。