ZBLOG

go 目录下图片读取和生成略缩图实例

下面是一个使用Go语言读取目录下的图片并生成缩略图的示例代码:

package main

import (
	"fmt"
	"image"
	"image/jpeg"
	"io/ioutil"
	"os"
	"path/filepath"

	"github.com/nfnt/resize"
)

func generateThumbnail(inputPath string, outputPath string, maxWidth uint, maxHeight uint) error {
	// 打开原始图片文件
	inputFile, err := os.Open(inputPath)
	if err != nil {
		return err
	}
	defer inputFile.Close()

	// 读取图片数据
	img, _, err := image.Decode(inputFile)
	if err != nil {
		return err
	}

	// 等比例缩放图片尺寸
	resizedImg := resize.Thumbnail(maxWidth, maxHeight, img, resize.Lanczos3)

	// 创建输出文件
	outputFile, err := os.Create(outputPath)
	if err != nil {
		return err
	}
	defer outputFile.Close()

	// 将缩略图数据写入文件
	jpeg.Encode(outputFile, resizedImg, nil)

	return nil
}

func main() {
	dirPath := "./images"    // 图片所在目录路径
	outputDir := "./thumbnails"   // 生成的缩略图保存目录路径

	fileInfos, err := ioutil.ReadDir(dirPath)
	if err != nil {
	    fmt.Println("无法读取目录:", dirPath)
	    return
    }
    
	for _, fileInfo := range fileInfos {
	    if !fileInfo.IsDir() && (filepath.Ext(fileInfo.Name()) == ".jpg" || filepath.Ext(fileInfo.Name()) == ".jpeg") {
	        // 构造输入和输出路径
	        inputFilePath := filepath.Join(dirPath, fileInfo.Name())
	        outputFilePath := filepath.Join(outputDir, fileInfo.Name())
	        
	        // 生成缩略图
	        err := generateThumbnail(inputFilePath, outputFilePath, 100, 100)   // 缩略图尺寸为100x100
	        if err != nil {
	            fmt.Printf("无法生成缩略图: %s\n", err)
            } else {
                fmt.Printf("成功生成缩略图: %s\n", outputFilePath)
            }
	    }
	}
}

请确保在运行代码之前,你已经安装了 github.com/nfnt/resize 包(可以通过运行 go get github.com/nfnt/resize 命令来安装)。

以上代码将遍历指定目录下的图片文件(假设是 jpg/jpeg 格式),并为每个图片生成一个宽度和高度都为 100 像素的缩略图。缩略图将保存到指定的输出目录中,并打印出成功或失败的消息。你可以根据需要修改生成缩略图的尺寸和输入、输出路径。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=10227

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?