Merge branch 'dev' of http://gitea.tools.fontree.cn:3000/fiee/fonchain-fiee into dev
This commit is contained in:
commit
192a6643d1
@ -1,6 +1,7 @@
|
|||||||
package imports
|
package imports
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -8,6 +9,9 @@ import (
|
|||||||
apiCast "fonchain-fiee/api/cast"
|
apiCast "fonchain-fiee/api/cast"
|
||||||
"fonchain-fiee/pkg/config"
|
"fonchain-fiee/pkg/config"
|
||||||
"fonchain-fiee/pkg/service"
|
"fonchain-fiee/pkg/service"
|
||||||
|
"image"
|
||||||
|
"image/draw"
|
||||||
|
"image/jpeg"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
@ -571,21 +575,17 @@ func downloadAndUploadToBucket(imageURL string) (string, error) {
|
|||||||
return "", fmt.Errorf("创建临时目录失败: %v", err)
|
return "", fmt.Errorf("创建临时目录失败: %v", err)
|
||||||
}
|
}
|
||||||
defer os.RemoveAll(tempDir) // 程序结束时清理整个目录
|
defer os.RemoveAll(tempDir) // 程序结束时清理整个目录
|
||||||
|
|
||||||
|
// 生成唯一文件名
|
||||||
rand.Seed(time.Now().UnixNano())
|
rand.Seed(time.Now().UnixNano())
|
||||||
fileName := fmt.Sprintf("%d%04d.jpg", time.Now().Unix(), rand.Intn(10000))
|
timestamp := time.Now().Unix()
|
||||||
|
randomNum := rand.Intn(10000)
|
||||||
|
fileName := fmt.Sprintf("%d%04d.jpg", timestamp, randomNum)
|
||||||
|
|
||||||
// 构建文件路径
|
// 构建文件路径
|
||||||
imgPath := filepath.Join(tempDir, fileName)
|
imgPath := filepath.Join(tempDir, fileName)
|
||||||
|
|
||||||
// 创建文件
|
// 下载图片
|
||||||
file, err := os.Create(imgPath)
|
|
||||||
if err != nil {
|
|
||||||
return "", fmt.Errorf("创建文件失败: %v", err)
|
|
||||||
}
|
|
||||||
defer file.Close()
|
|
||||||
|
|
||||||
log.Printf("文件创建在: %s", imgPath)
|
|
||||||
|
|
||||||
// 下载图片到文件
|
|
||||||
resp, err := http.Get(imageURL)
|
resp, err := http.Get(imageURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("下载图片失败: %v", err)
|
return "", fmt.Errorf("下载图片失败: %v", err)
|
||||||
@ -596,50 +596,62 @@ func downloadAndUploadToBucket(imageURL string) (string, error) {
|
|||||||
return "", fmt.Errorf("下载失败,状态码: %d", resp.StatusCode)
|
return "", fmt.Errorf("下载失败,状态码: %d", resp.StatusCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 复制到文件
|
// 读取图片数据
|
||||||
_, err = io.Copy(file, resp.Body)
|
imgData, err := io.ReadAll(resp.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("保存文件失败: %v", err)
|
return "", fmt.Errorf("读取图片数据失败: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
file.Sync()
|
// 检测图片格式并转换为JPG
|
||||||
|
jpgData, err := convertToJPG(imgData)
|
||||||
fileBytes, err := os.ReadFile(imgPath)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("读取本地文件失败: %v", err)
|
return "", fmt.Errorf("转换图片格式失败: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 保存转换后的JPG文件
|
||||||
|
if err := os.WriteFile(imgPath, jpgData, 0644); err != nil {
|
||||||
|
return "", fmt.Errorf("保存JPG文件失败: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 上传到对象存储
|
||||||
BOSClient, err := objstorage.NewOSS(
|
BOSClient, err := objstorage.NewOSS(
|
||||||
os.Getenv(config.ConfigData.Oss.AccessKeyId),
|
os.Getenv(config.ConfigData.Oss.AccessKeyId),
|
||||||
os.Getenv(config.ConfigData.Oss.AccessKeySecret),
|
os.Getenv(config.ConfigData.Oss.AccessKeySecret),
|
||||||
os.Getenv(config.ConfigData.Oss.Endpoint),
|
os.Getenv(config.ConfigData.Oss.Endpoint),
|
||||||
)
|
)
|
||||||
if BOSClient == nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("上传文件失败: %v", err)
|
return "", fmt.Errorf("创建OSS客户端失败: %v", err)
|
||||||
}
|
}
|
||||||
_, err = BOSClient.PutObjectFromBytes(os.Getenv(config.ConfigData.Oss.BucketName), fileName, fileBytes)
|
if BOSClient == nil {
|
||||||
|
return "", fmt.Errorf("OSS客户端为空")
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = BOSClient.PutObjectFromBytes(os.Getenv(config.ConfigData.Oss.BucketName), fileName, jpgData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("上传文件失败: %v", err)
|
return "", fmt.Errorf("上传文件失败: %v", err)
|
||||||
}
|
}
|
||||||
url := fmt.Sprintf("%s/%s", os.Getenv(config.ConfigData.Oss.CdnHost), fileName)
|
|
||||||
//上传到桶
|
|
||||||
//BOSClient, err := objstorage.NewOSS(
|
|
||||||
// config.ConfigData.Oss.AccessKeyId,
|
|
||||||
// config.ConfigData.Oss.AccessKeySecret,
|
|
||||||
// config.ConfigData.Oss.Endpoint,
|
|
||||||
//)
|
|
||||||
//if BOSClient == nil {
|
//if BOSClient == nil {
|
||||||
// return "", fmt.Errorf("上传文件失败: %v", err)
|
|
||||||
//}
|
|
||||||
//_, err = BOSClient.PutObjectFromBytes(config.ConfigData.Oss.BucketName, fileName, fileBytes)
|
|
||||||
//if err != nil {
|
|
||||||
// return "", fmt.Errorf("上传文件失败: %v", err)
|
|
||||||
//}
|
|
||||||
//url := fmt.Sprintf("%s/%s", config.ConfigData.Oss.CdnHost, fileName)
|
|
||||||
|
|
||||||
|
// 返回CDN URL
|
||||||
|
url := fmt.Sprintf("%s/%s", os.Getenv(config.ConfigData.Oss.CdnHost), fileName)
|
||||||
return url, nil
|
return url, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//上传到桶
|
||||||
|
//BOSClient, err := objstorage.NewOSS(
|
||||||
|
// config.ConfigData.Oss.AccessKeyId,
|
||||||
|
// config.ConfigData.Oss.AccessKeySecret,
|
||||||
|
// config.ConfigData.Oss.Endpoint,
|
||||||
|
//)
|
||||||
|
//if BOSClient == nil {
|
||||||
|
// return "", fmt.Errorf("上传文件失败: %v", err)
|
||||||
|
//}
|
||||||
|
//_, err = BOSClient.PutObjectFromBytes(config.ConfigData.Oss.BucketName, fileName, fileBytes)
|
||||||
|
//if err != nil {
|
||||||
|
// return "", fmt.Errorf("上传文件失败: %v", err)
|
||||||
|
//}
|
||||||
|
//url := fmt.Sprintf("%s/%s", config.ConfigData.Oss.CdnHost, fileName)
|
||||||
|
|
||||||
func (p *BatchProcessor) generateTitleAndContent(req *excelData) (string, string, error) {
|
func (p *BatchProcessor) generateTitleAndContent(req *excelData) (string, string, error) {
|
||||||
if req.PhotoUrl != "" {
|
if req.PhotoUrl != "" {
|
||||||
title, content, err := NewAiGenerator().GenerateTitleAndContentFromImage(
|
title, content, err := NewAiGenerator().GenerateTitleAndContentFromImage(
|
||||||
@ -679,7 +691,7 @@ func (p *BatchProcessor) generateImage(req *excelData) (string, error) {
|
|||||||
prompt += "\n要求不能出现:低质量、残缺、人物正脸、多余的手指、乱码字符和文字、比例不良,场景以国内场景为主"
|
prompt += "\n要求不能出现:低质量、残缺、人物正脸、多余的手指、乱码字符和文字、比例不良,场景以国内场景为主"
|
||||||
|
|
||||||
if req.PhotoDpi == "" {
|
if req.PhotoDpi == "" {
|
||||||
req.PhotoDpi = "720*1280"
|
req.PhotoDpi = "1024*1024"
|
||||||
|
|
||||||
}
|
}
|
||||||
result, err := NewAiGenerator().TextToImage(
|
result, err := NewAiGenerator().TextToImage(
|
||||||
@ -693,6 +705,33 @@ func (p *BatchProcessor) generateImage(req *excelData) (string, error) {
|
|||||||
return result.Output.TaskID, nil
|
return result.Output.TaskID, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// convertToJPG 将图片数据转换为JPG格式
|
||||||
|
func convertToJPG(imgData []byte) ([]byte, error) {
|
||||||
|
// 使用标准库解码
|
||||||
|
img, format, err := image.Decode(bytes.NewReader(imgData))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("解码图片失败: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("检测到图片格式: %s, 尺寸: %dx%d", format, img.Bounds().Dx(), img.Bounds().Dy())
|
||||||
|
|
||||||
|
// 创建新的RGBA图片
|
||||||
|
bounds := img.Bounds()
|
||||||
|
rgba := image.NewRGBA(bounds)
|
||||||
|
|
||||||
|
// 绘制到RGBA
|
||||||
|
draw.Draw(rgba, bounds, img, bounds.Min, draw.Src)
|
||||||
|
|
||||||
|
// 编码为JPG
|
||||||
|
var buf bytes.Buffer
|
||||||
|
opts := &jpeg.Options{Quality: 90} // 设置质量为90%
|
||||||
|
if err := jpeg.Encode(&buf, rgba, opts); err != nil {
|
||||||
|
return nil, fmt.Errorf("编码JPG失败: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf.Bytes(), nil
|
||||||
|
}
|
||||||
|
|
||||||
//func (p *BatchProcessor) StartPolling() {
|
//func (p *BatchProcessor) StartPolling() {
|
||||||
// go func() {
|
// go func() {
|
||||||
// ticker := time.NewTicker(p.pollInterval) // 1秒间隔
|
// ticker := time.NewTicker(p.pollInterval) // 1秒间隔
|
||||||
|
|||||||
@ -58,6 +58,7 @@ func publishImage(req publishImageReq) (err error) {
|
|||||||
|
|
||||||
//---------------------------------------------------发布
|
//---------------------------------------------------发布
|
||||||
_, err = service.CastProvider.UpdateWorkImage(context.Background(), &apiCast.UpdateWorkImageReq{
|
_, err = service.CastProvider.UpdateWorkImage(context.Background(), &apiCast.UpdateWorkImageReq{
|
||||||
|
ArtistSubNum: list.UserList[0].SubNum,
|
||||||
Title: req.Title,
|
Title: req.Title,
|
||||||
Content: req.Content,
|
Content: req.Content,
|
||||||
Images: req.GeneratePhotoUrl,
|
Images: req.GeneratePhotoUrl,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user