概述
眾所周知,無論是Stable Diffusion
或者 Comfyui
生成的圖片,在 exif
區域都會帶上 prompt
seed
等信息
如果是Comfyui
,還會帶上 workflow
那么對于 png 圖片而言,這些信息到底是存放在哪里的呢?本文來簡單的研究一下
010
首先使用 010 editor 打開,加載 PNG 模板分析一下數據區域
image.png
模板運行完成之后,就可以看到png的數據塊了
Comfyui
image.png
如圖所示, Comfyui 會保存兩個 tEXt
chunk 區
-
prompt = {}
提示詞區域,{}
是一個json 字符串 -
workflow = {}
工作流區域
Stable Diffusion
兩種場景,猜測是和 Stable Diffusion 版本有關
一個在 iTXt, 一個在 eXTt
image.png
image.png
golang
使用 golang 代碼讀取 png exif 的話,demo 如下
package main
import (
"fmt"
"log"
png "github.com/dsoprea/go-png-image-structure"
)
func main() {
ReadPic("sd.png")
ReadPic("comfyui.png")
}
func ReadPic(name string) {
pmp := png.NewPngMediaParser()
intfc, err := pmp.ParseFile(name)
if err != nil {
log.Println("read file", err)
return
}
cs := intfc.(*png.ChunkSlice)
for _, ch := range cs.Chunks() {
if ch.Type == "tEXt" || ch.Type == "iXTt" {
fmt.Println(string(ch.Data))
}
}
}