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

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.Decodepng.Decodeimage.Decode的时候,共性就是

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

  1. 采取了不正确的手段转换格式,导致不能正常解码
  2. 对图片本身进行了非法修改,导致不能正常解码
  3. 原图片在生成时就有问题

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

这些报错前后都经历了,还尝试过换不同的后缀来进行合成,因为前一步转换(webp–>pngwebp–>jpgwebp–>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

}

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

原文地址:https://blog.csdn.net/HYZX_9987/article/details/128736771

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_16585.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注