概述
众所周知,无论是Stable Diffusion
或者 Comfyui
生成的图片,在 exif
区域都会带上 prompt
seed
等信息
如果是Comfyui
,还会带上 workflow
那么对于 png 图片而言,这些信息到底是存放在哪里的呢?本文来简单的研究一下
010
首先使用 010 editor 打开,加载 PNG 模板分析一下数据区域
模板运行完成之后,就可以看到png的数据块了
Comfyui
如图所示, Comfyui 会保存两个 tEXt
chunk 区
-
prompt = {}
提示词区域,{}
是一个json 字符串 -
workflow = {}
工作流区域
Stable Diffusion
两种场景,猜测是和 Stable Diffusion 版本有关
一个在 iTXt, 一个在 eXTt
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))
}
}
}