我有一个 bmp 文件,正在尝试将其转换为 jpeg 格式。使用以下代码创建的 jpeg 失去了很多清晰度。我尝试过调整很多设置,但没有效果。
有没有人有一个可以将 bmp 文件转换为 jpeg 的函数?
var
Bmp: TBitmap;
Jpg: TJPEGImage;
begin
Bmp := TBitmap.Create;
Jpg := TJPEGImage.Create;
try
Bmp.LoadFromFile(BmpFileName);
Jpg.Assign(Bmp);
jpg.PixelFormat :=jf24bit; // or jf8bit
Jpg.CompressionQuality := 100;
Jpg.ProgressiveDisplay := False;
Jpg.ProgressiveEncoding := False;
Jpg.SaveToFile(JpgFileName);
finally
Jpg.Free;
Bmp.Free;
end;
end;
更新 II 很多人回应说 jpeg 不是在这种情况下使用的图形类型。明白了。不是为了打败一个死马,但我已经能够使用其他程序(即 Photoshop)并将其转换为漂亮的 jpeg。我用来创建图表的工具(fusioncharts)也能够将其导出为漂亮的 jpeg(见下文)。有什么区别?
最佳答案
如果你想损失尽可能少的质量,那么你应该尽可能少地压缩,即设置CompressionQuality := 100
。
更新
JPG 图像格式设计用于照片和类似的光栅图片。 JPG 采用破坏性压缩来减小文件大小。然而,对于较大的质量值 (> ~80),这种压缩的视觉效果可以忽略不计,因为照片不包含大面积的相同颜色、非常规则的形状等。
JPG 格式绝不用于摄影图片以外的任何内容。例如,图表、屏幕截图等确实包含大面积完全相同的颜色、非常规则的形状等,在 JPG 压缩时将显示清晰的伪像。对于这种类型的光栅图像,请使用 PNG。 PNG也是一种压缩格式(也是一种非常非常好的格式!),但压缩是非破坏性的。
所以请不要使用 JPG 作为您的图表!使用PNG!
关于delphi - 使用 TJpegImage 组件将 bmp 转换为 jpg 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3102043/