Skip to content

[Help] I am using a way to blur part of an image (not entire image), Am I correct or misusing? #28

@mk48

Description

@mk48

I am using below methods to blur a face in an image.
Am I using it properly or misusing?

package main

import (
	"image"
	"image/jpeg"
	"log"
	"os"

	"github.com/disintegration/gift"
)

func main() {
	faceX := 1713
	faceY := 1752
	faceWidth := 130
	faceHeight := 130

	src := loadImage("1.jpg")

	//Copy original image
	gCopyImage := gift.New()
	fullImage := image.NewRGBA(gCopyImage.Bounds(src.Bounds()))
	gCopyImage.Draw(fullImage, src)

	//Crop some part
	gCrop := gift.New(gift.Crop(image.Rect(faceX, faceY, faceX+faceWidth, faceY+faceHeight)))
	croppedImage := image.NewRGBA(gCrop.Bounds(src.Bounds()))
	gCrop.Draw(croppedImage, src)

	//Pixelate the cropped image and draw on original image
	gPixelate := gift.New(gift.Pixelate(20))
	gPixelate.DrawAt(fullImage, croppedImage, image.Point{X: faceX, Y: faceY}, gift.OverOperator)

	saveImage("out.jpg", fullImage)
}

func loadImage(filename string) image.Image {
	f, err := os.Open(filename)
	if err != nil {
		log.Fatalf("os.Open failed: %v", err)
	}
	defer f.Close()
	img, _, err := image.Decode(f)
	if err != nil {
		log.Fatalf("image.Decode failed: %v", err)
	}
	return img
}

func saveImage(filename string, img image.Image) {
	f, err := os.Create(filename)
	if err != nil {
		log.Fatalf("os.Create failed: %v", err)
	}
	defer f.Close()
	//err = png.Encode(f, img)
	err = jpeg.Encode(f, img, &jpeg.Options{Quality: 99})
	if err != nil {
		log.Fatalf("png.Encode failed: %v", err)
	}
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions