如何在不使用Qt将透明色变为黑色的情况下将具有透明性的文件保存为JPEG文件?
我知道JPEG不支持alpha,黑色可能只是alpha的默认“0”值,但是黑色是一种可怕的默认颜色。
看来这应该是一个简单的操作,但是在另存为JPEG时,我尝试过的所有mask和alpha函数都将被忽略。
例如:
image->load("someFile.png"); // Has transparent background or alpha channel
image->save("somefile.jpg", "JPG"); // Transparent color is black
在保存为JPEG之前,我曾尝试用白色填充图像,然后在保存之前将图像转换为ARGB32(具有8位alpha channel ),甚至尝试过这样的速度很慢的事情:
QImage image2 = image1->convertToFormat(QImage::Format_ARGB32);
image2.setAlphaChannel(image1->alphaChannel());
image2.save(fileURI, "JPG", this->jpgQuality; // Still black!
See: http://67.207.149.83/qt_black_transparent.png for a visual.
最佳答案
我会尝试这样的操作(即加载图像,创建另一个相同大小的图像,绘制背景,绘制图像):
QImage image1("someFile.png");
QImage image2(image1.size());
image2.fill(QColor(Qt::white).rgb());
QPainter painter(&image2);
painter.drawImage(0, 0, image1);
image2.save("somefile.jpg", "JPG");