通过Imagick创建/保存DirectDraw Surface(DDS)图像

时间:2014-11-29 00:38:35

标签: php imagemagick imagick

这是我第一次使用PHP Imagick并遇到问题。

我正在创建一个网站模块,用户可以上传需要转换为加密文件类型的图像,其中包含上传的图像作为DDS纹理。

所以我需要做的是将上传的图像转换为dds文件格式。

代码:

$img = new Imagick('test.png'); //Load the uploaded image
$img->setformat('dds'); //Set the format to dds
$img->setImageCompression(Imagick::COMPRESSION_DXT3); //Set compression method
$img->writeimage('test.dds'); //Write/save the dds texture

问题:输出文件总是一个空的0字节文件。

PNG需要转换:test.png

DDS需要输出:test.dds

也许我需要其他版本的Imagick或ImageMagick?

我的版本是:

  1. PHP 5.5.15
  2. Imagick 3.1.2-5.5-ts-vc11-x86
  3. ImageMagick 6.8.4-0-Q16-x86
  4. 我目前正在Windows 8.1 x64上进行测试。

    任何建议/帮助都将不胜感激。

    修改:编辑了这个问题,希望现在可以清楚地了解我想要实现的目标。

    解决了:问题是不支持DDS写入的ImageMagick版本。

    安装了ImageMagick 6.8.6-10-Q16-x86,因为在该版本中添加了DDS写入支持(较新的版本导致想象不加载)。

    我使用和工作的当前版本:

    1. PHP 5.5.15
    2. Imagick 3.1.2-5.5-ts-vc11-x86
    3. ImageMagick 6.8.6-10-Q16-x86

1 个答案:

答案 0 :(得分:0)

从上面的调试开始,问题是您的ImageMagick版本不支持编写DXT3压缩DDS文件。

解决此问题的方法是:

  1. 使用不同的压缩格式 - DXT5可能没问题,但它与DXT3不完全相同。

  2. 升级到支持DXT3格式写入的较新版本的ImageMagick和Imagick。