【问题标题】:Reading an RLE-compressed Layer of a Photoshop (PSD) File读取 Photoshop (PSD) 文件的 RLE 压缩层
【发布时间】:2011-07-01 22:08:19
【问题描述】:

我基于the official PSD File Format documentation

我可以很好地读取原始数据,而且我的所有文件都没有 ZIP 压缩。我所需要的只是让 RLE 工作。

现在,我对解压缩信息不感兴趣。我只想将其读入并以压缩形式存储在内存中。稍后我会处理解压。

我所做的只是计算 RLE 数据的大小,并逐个通道地批量读取它。这是我用来计算通道数据大小的函数:

用 ActionScript 3.0 编写

////////////////////////////////////////////////////////////////////
// Compute RLE Data Size
////////////////////////////////////////////////////////////////////
protected function _computeRLESize( data_ : ByteArray, record_ : PSDLayerRecord ) : int
{
    var numScanlines : int;
    var ii : int;
    var size : int;
    var totalSize : int;
    var pad : int;

    // Compute our total time
    totalSize = ( record_.bottom - record_.top ) * ( record_.right - record_.left );

    // Find our number of scanlines
    numScanlines = record_.bottom - record_.top;

    // Initialize our size
    size = 0;

    // Loop through each line to see how many bytes we have
    trace( "Num Scanlines: " + numScanlines );
    for ( ii = 0; ii < numScanlines; ii++ )
    {
        pad = data_.readShort();
        if ( pad % 2 != 0 ) pad++;
        size += pad;
    }

    // Output our compression
    trace( "Image is at " + size + " / " + totalSize + " compression" );

    // When we're done, back up to the beginning so we can read it
    data_.position -= numScanlines * 2;

    // Return our size
    return size + numScanlines * 2;
}

我已经让其他四位专业的编码人员和官方文档一起研究了这段代码,他们都没有发现它有什么问题。

感谢您的帮助。

【问题讨论】:

    标签: compression photoshop layer psd


    【解决方案1】:

    您是否只想知道通道像素数据大小(关于 RLE 或 RAW 压缩)?您可以从图层记录中的通道信息中获取大小。

    【讨论】:

      猜你喜欢
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      • 2022-01-06
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多