Vips writeToBuffer 不应用图像质量

问题描述

我正在尝试使用具有质量的 libvips writetoBuffer 方法,但它没有将质量应用于图像,是否还有其他设置质量的方法。如果文件存在,我有以下情况,否则它调用 writetoFile 否则 writetoBuffer。有没有实现以下情况的解决方案?

$image = Vips\Image::newFromFile($sourceimgfile);
$result = $image->writetoBuffer('.jpg',['Q' => 50]);
file_put_contents($destinationimgfile,$result);

实际输出

enter image description here

如果我将图像质量设置为 50,那么它应该给我低分辨率图像,但它仍然生成与输入图像相同的图像。它没有对图像应用质量。

解决方法

它应该可以工作。您可以像这样在命令行中进行测试:

$ vips jpegsave_buffer astronauts.png --Q 20
VIPS_TYPE_BLOB,data = 0x7f5388000b60,length = 55617
$ vips jpegsave_buffer astronauts.png --Q 90
VIPS_TYPE_BLOB,data = 0x7fefbc6f9010,length = 263341

所以在 Q 20,它只有 55kb,但 Q 90 是 260kb。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...