PSD图像格式分层读取

一、简介

photoshop专有的图像格式PSD文件是一个由多张,多层图像数据叠加的图像数据。网上只有读取整幅图片数据的使用,并且是英文文档,资料不是很全,中文资料更是为0,,通过使用libpsd库,拉斐尔在源码中相关多层图像数据混合操作中发现layer_records图像层结构体指针,以及image_data图像数据指针,通过这些参数可以直接读取或者拷贝图像数据到你自己的内存pbuffer中。有意思的是,任何网站对libpsd库的介绍只是这一句:libpsd库是 C语言用来解析 PSD 文件的开发包。更别说libpsd 库的编译了。不过发现编译并不是很难。

libpsd库

下载地址:https://github.com/freeman1974/libpsd
 
Zlib库是zlib是提供数据压缩用的函式库,最初是为libpng函式库所写的,后来普遍为许多软件所使用。是编译libpsd库的前提。
下载地址:http://www.zlib.net/
 
二、静态库编译
编译zlib静态链接库(Debug/Release版本):
1、新建一个win32 控制台程序,命名为zlib,预编译头文件为空。
2、配置属性(configuration type)设置Static library (.lib)。
3、添加zlib文件夹下的所有 .c与.h 文件。
4、编译生成zlib.lib文件。
 
编译libpsd静态链接库(Debug/Release版本):
方法与zlib类似。

提示: zlib库先编译,libpsd 库编译需要zlib.lib文件。


test:

部分代码:

新建win32控制台程序。
包含头文件 #include "../libpsd/libpsd.h"
首先定义结构体指针:
psd_context * context = NULL; // 存放所有psd图像信息
psd_status status; // bool型
psd_layer_record* layerRecord; // 层图像结构体指针
 
status = psd_image_load_layer(&context, pFilepath); // 默认读取所有层信息与图像数据
layerRecord = context->layer_records; // 第0层的结构指针
layerRecord += 1;// 第1层的结构指针
// layerRecord->top 基本信息
// layerRecord->left
// layerRecord->bottom
// layerRecord->right
// layerRecord->image_data 指定层的图像数据指针
int  buffersize =  layerRecord->height* (layerRecord->weidth*3+3)/4*4);
 BYTE* buffer = new BYTE[buffersize];
memcpy(buffer,layerRecord->image_data,buffersize);
///你的代码///
 
delete[] buffer;
psd_image_free(context);

//最后释放结构体指针。

拉斐尔提示:有什么问题可留言。

 
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值