一、前言
在golang中的图片处理并没有提供修改图片的DPI分辨率即水平分辨率/垂直分辨率
二、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文件
修改writer.go
中的Encode
方法,添加xPixelsPerMeter和yPixelsPerMeter参数
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