Go: ridimensionamento proporzionale delle immagini

Go: ridimensionamento proporzionale delle immagini

Il ridimensionamento proporzionale di immagini è un'operazione comune nell'ambito dello sviluppo di software, specialmente quando si lavora con applicazioni che coinvolgono la manipolazione di grafica o la gestione di immagini. In Go, è possibile effettuare questa operazione in modo efficiente utilizzando la libreria image insieme a draw e jpeg (o png, a seconda del formato delle immagini).

Preparazione dell'ambiente

Per prima cosa, è necessario installare la libreria github.com/nfnt/resize per semplificare il processo di ridimensionamento delle immagini. Puoi farlo eseguendo il seguente comando:


go get -u github.com/nfnt/resize

Creazione di una funzione di ridimensionamento

Successivamente, puoi creare una funzione in Go per eseguire il ridimensionamento proporzionale delle immagini. Ecco un esempio di come potrebbe apparire una funzione di base:


package main

import (
	"fmt"
	"image"
	"image/draw"
	_ "image/jpeg"
	"os"

	"github.com/nfnt/resize"
)

// RidimensionaImmagine proporzionalmente con una nuova larghezza specificata
func ResizeImage(inputPath, outputPath string, newWidth uint) error {
	// Apri il file immagine di input
	inputFile, err := os.Open(inputPath)
	if err != nil {
		return err
	}
	defer inputFile.Close()

	// Decodifica l'immagine
	img, _, err := image.Decode(inputFile)
	if err != nil {
		return err
	}

	// Calcola la nuova altezza mantenendo le proporzioni
	newHeight := uint(float64(newWidth) / float64(img.Bounds().Dx()) * float64(img.Bounds().Dy()))

	// Ridimensiona l'immagine
	resizedImage := resize.Resize(newWidth, newHeight, img, resize.Lanczos3)

	// Crea un nuovo file per l'immagine ridimensionata
	outputFile, err := os.Create(outputPath)
	if err != nil {
		return err
	}
	defer outputFile.Close()
	return nil
}

func main() {
	// Esempio di utilizzo della funzione
	err := ResizeImage("input.jpg", "output.jpg", 300)
	if err != nil {
		fmt.Println("Errore:", err)
	}
}

Spiegazione del codice

  1. Apertura del file di input: La funzione apre il file dell'immagine di input utilizzando os.Open().

  2. Decodifica dell'immagine: L'immagine viene decodificata utilizzando la libreria image.

  3. Calcolo delle nuove dimensioni: Viene calcolata la nuova altezza in base alla nuova larghezza specificata, mantenendo le proporzioni originali.

  4. Ridimensionamento: L'immagine viene ridimensionata utilizzando la funzione resize.Resize() della libreria github.com/nfnt/resize.

  5. Creazione del file di output: Viene creato un nuovo file per l'immagine ridimensionata utilizzando os.Create().

  6. Codifica e salvataggio: L'immagine ridimensionata viene codificata nel formato desiderato (in questo caso, JPEG) e salvata nel nuovo file.

  7. Esempio di utilizzo: Nella funzione main(), viene eseguito un esempio di utilizzo della funzione di ridimensionamento.

Con questo esempio, hai ora una base solida per implementare il ridimensionamento proporzionale di immagini in Go. Puoi adattare questa funzione alle tue esigenze specifiche, come la gestione di più immagini o la manipolazione di altri formati di file.

Torna su