Golang笔记

使用Golang 简单删除图片exif 信息

为了避免图片exif 信息泄漏,需要在使用Go 删除图片exif 信息

代码实现,使用原生库:

package main

import (
	"bytes"
	"errors"
	"fmt"
	"io"
	"os"
)

func Dexif(filepath string, destpath string) error {
	f, err := os.Open(filepath)
	defer func() {
		_ = f.Close()
	}()
	if err != nil {
		return err
	}

	b := make([]byte, 2)
	_, err = f.Seek(2, 0)
	if err != nil {
		return err
	}
	_, err = f.Read(b)
	if err != nil {
		return err
	}

	res := bytes.Compare(b, []byte{0xFF, 0xE1})
	if res == 0 {
		for i := 0; i < 32768; i++ {
			_, err = f.Read(b)
			if err != nil {
				return err
			}
			res := bytes.Compare(b, []byte{0xFF, 0xD9})
			if res == 0 {
				break
			}
		}
	} else {
		return errors.New("no exif data found")
	}

	fout, err := os.Create(destpath)
	if err != nil {
		return err
	}
	defer func() {
		_ = fout.Close()
	}()

	_, err = fout.Write([]byte{0xFF, 0xD8})
	if err != nil {
		return err
	}

	_, err = io.Copy(fout, f)
	if err != nil {
		return err
	}

	return nil
}

func main()  {
	err := Dexif("WechatIMG36b.jpeg", "WechatIMG36c.jpeg")
	if err != nil {
		fmt.Println(err)
	}
}

实现很简单。

本文网址: https://golangnote.com/topic/267.html (转载注明出处)
关于GolangNote:记录在工作中使用golang 遇到、面临的相关问题及解决方法。如果你在这里获得一些知识或信息,解决你的编程问题,请考虑捐赠给不幸的人或者你喜欢的慈善机构,除捐赠外,种植树木、志愿服务或减少排碳的行为也很有益处。如果你有任何问题可以在下面 留言
Be the first to comment!
Captcha image
Relative Articles