Golang 图片JPEG base64转换BMP格式,修改DPI分辨率

一、前言

在golang中的图片处理并没有提供修改图片的DPI分辨率即水平分辨率/垂直分辨率
image.png

二、C#修改DPI

//base64字符串
string base64String="";
byte[] imageBytes = Convert.FromBase64String(base64String);
using (MemoryStream ms = new MemoryStream(imageBytes))
{
    Bitmap bmp = new Bitmap(ms);
    //修改dpi分辨率为300*300
    bmp.SetResolution(300, 300);
    bmp.Save(savePhotoPath, ImageFormat.Jpeg);
    bmp.Dispose();
}

三、Go修改DPI

  • 1、需要修改golang.org/x/image/bmp/writer.go源码,因为没有对dpi属性的设置
    创建vendor目录和复制writer.go文件
    image.png

    修改writer.go中的Encode方法,添加xPixelsPerMeter和yPixelsPerMeter参数
    image.png

    2、编写test测试
func TestImgToBmp(t *testing.T) {
        //base64的图片字符串
    base64Img := ""
    index := strings.Index(base64Img, ",")
    base64Img = base64Img[index+1:]
    dist, err := base64.StdEncoding.DecodeString(base64Img)
    if err != nil {
        t.Error(err)
        return
    }
    src, err := jpeg.Decode(bytes.NewBuffer(dist))
    if err != nil {
        t.Error(err)
        return
    }

    fmt.Println("Converting image...")
    outfile, err := os.Create("out2.jpg")
    if err != nil {
        t.Error(err)
        return
    }
    defer outfile.Close()

    err = bmp.Encode(outfile, src)
    if err != nil {
        t.Error(err)
        return
    }
    fmt.Println("Convert Success!")

}
  • 运行结果
=== RUN   TestImgToBmp
Converting image...
Convert Success!
--- PASS: TestImgToBmp (0.01s)
PASS

Process finished with exit code 0
image.png

你可能感兴趣的:(Golang 图片JPEG base64转换BMP格式,修改DPI分辨率)