解决png: invalid format: not a PNG file以及invalid JPEG format: missing SOI marker等问题

看到这几个报错是不是很头疼?

png: invalid format: not a PNG file

png: invalid format: not a JPEG file

invalid JPEG format: missing SOI marker

invalid JPG format: missing SOI marker

invalid PNG format: missing SOI marker

...等等

目录

背景

解决方案


背景

webp的图片转为其他格式、合成图片时报的错。

这几个报错都几乎发生在jpeg.Decode、png.Decode、image.Decode的时候,共性就是

图片格式或者图片本身有问题,原因如下:

1,采取了不正确的手段转换了格式,导致不能正常解码

2,对图片本身进行了非法修改,导致不能正常解码

3,原图片在生成时就有问题

最简单的例子就是直接改后缀名就会导致基于一定方法来转换就出错。

这些报错前后都经历了,还尝试过换不同的后缀来进行合成,因为前一步转换(webp-->png、webp-->jpg、webp-->jpeg)的方法不对,导致最终合成都会失败(合成时会有Decode这一步)。 

尝试过base64那种方式转换然后加后缀,也是不行的(多数方式代码看起来很像,实则还是有区别)。

解决方案

用到了github.com/h2non/bimg这个包。


// dir:新存放目录, path:源文件路径  imageType: 要转成的格式
// convert 转换格式
func convertFormat(srcPath, dir string, imageType bimg.ImageType) (error, string) {
	buffer, err := bimg.Read(srcPath)
	if err != nil {
		return err, ""

	}

	bImage := bimg.NewImage(buffer)

	options := bimg.Options{
		// Width: 512,
		// Height: 512,  // 按实际需要是否需要resize
		Embed:   true,
		Quality: 96,
		Gamma:   1.0,
	}

	img, err := bImage.Process(options)
	if err != nil {
		return err, ""

	}

	newImage, err := bimg.NewImage(img).Convert(imageType)
	if err != nil {
		return err, ""
	}

	fileName := "xx." + bimg.ImageTypes[imageType] // 名称
	filePath := filepath.Join(dir, fileName)       //  路径
	return bimg.Write(filePath, newImage), filePath

}

这样就欧克了,实测正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ProblemTerminator

您的鼓励将是作者最大的动力哦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值