在Flutter中如何将PNG图片转换为JPG格式?
Flutter PNG转JPG输出全黑问题解决方法
全黑问题核心是PNG图片包含透明Alpha通道,而JPG格式不支持透明属性,直接编码时Alpha通道丢弃后透明区域会被默认填充为黑色,若原PNG整体为透明背景就会出现全黑的输出结果。
修正后可直接运行的代码如下:
import 'dart:io'; import 'package:image/image.dart' as img; void convertPngToJpg(String pngFilePath, String outputJpgPath) async { // 读取PNG文件字节 final pngBytes = await File(pngFilePath).readAsBytes(); // 解码PNG图片 final originalImage = img.decodePng(pngBytes); if (originalImage == null) return; // 创建相同尺寸的白色背景图片(无Alpha通道) final whiteBackground = img.Image(originalImage.width, originalImage.height); // 填充背景为白色,也可根据需求替换为其他兜底颜色 img.fill(whiteBackground, img.getColor(255, 255, 255)); // 将原PNG图片绘制到白色背景上,消除Alpha通道影响 final mergedImage = img.drawImage(whiteBackground, originalImage); // 可选操作:生成200高度的缩略图,自动保持宽高比 final thumbnail = img.copyResize(mergedImage, height: 200); // 编码为JPG并写入文件,quality参数可调整画质,取值范围0-100 final jpgBytes = img.encodeJpg(thumbnail, quality: 90); await File(outputJpgPath).writeAsBytes(jpgBytes); }
额外注意事项
- 若确认原PNG无透明区域,可直接移除图片Alpha通道简化操作:
originalImage.channels = Channels.rgb;,无需额外绘制背景 - encodeJpg的
quality参数默认值为75,数值越高质量越好、文件体积越大,可根据业务场景灵活调整 - 若转换后存在边缘色差,可适当调整背景填充色匹配原PNG的设计风格
内容的提问来源于stack exchange,提问作者Deepanshu
相关产品推荐
相关产品推荐

