下面是一个使用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助手提供,问题来源于学员提问