成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > go語言實現(xiàn)將重要數(shù)據(jù)寫入圖片中

go語言實現(xiàn)將重要數(shù)據(jù)寫入圖片中

熱門標簽:騰訊外呼系統(tǒng)價格 谷歌便利店地圖標注 百度地圖標注搜索關(guān)鍵詞 ?兓? 浙江人工智能外呼管理系統(tǒng) 成都呼叫中心外呼系統(tǒng)平臺 最短的地圖標注 電梯外呼訪客系統(tǒng) 電銷機器人可以補救房產(chǎn)中介嗎

原理:將數(shù)據(jù)的二進制形式寫入圖像紅色通道數(shù)據(jù)二進制的低位
只支持png格式的輸出
寫入數(shù)據(jù)
go run shadow.go -in="c.jpg" -data="hide me" -out="out.png"
讀取數(shù)據(jù)
go run shadow.go -in="out.png"

復制代碼 代碼如下:

package main
import (
    "errors"
    "flag"
    "fmt"
    "image"
    "image/color"
    _ "image/jpeg"
    "image/png"
    "log"
    "math"
    "os"
)
var FLAG = [4]byte{0x13, 0x14, 0x52, 0x00} //shadow flag.
//byte to 8 bits
func Byte2bits(b byte) (a [8]byte) {
    var c uint8 = 7
    var i uint8
    for i = 0; i 8; i++ {
        a[i] = b >> (c - i) 1
    }
    return
}
//8 bits to byte.
func Bits2Byte(a [8]byte) (b byte) {
    for i := 0; i 8; i++ {
        b += a[i] * uint8(math.Pow(2, float64(7-i)))
    }
    return
}
//uint32 to 4 bytes.
func Uint32ToBytes(i uint32) (b [4]byte) {
    b[0] = uint8(i >> 24)
    b[1] = uint8(i >> 16 0xffff)
    b[2] = uint8(i >> 8 0xff)
    b[3] = uint8(i 0xff)
    return
}
//4 bytes to uint32.
func Bytes2Uint32(b [4]byte) (i uint32) {
    var j uint32
    for ; j 4; j++ {
        i += uint32(b[j]) (24 - j*8)
    }
    return
}
func BuildShadowHeader(length uint32) (b [8]byte) {
    var i int
    for ; i 4; i++ {
        b[i] = FLAG[i]
    }
    a := Uint32ToBytes(length)
    for ; i 8; i++ {
        b[i] = a[i-4]
    }
    return
}
func WriteShadow(b []byte, im image.Image) (out image.Image, err error) {
    max := im.Bounds().Max.X*im.Bounds().Max.Y/8 - 64
    b_len := len(b)
    if len(b) > max {
        return nil, errors.New("image does not have enough space for shadow.")
    }
    head := BuildShadowHeader(uint32(b_len))
    var bb byte
    var bs [8]byte
    var i int
    out, err = SetImage(im, func(index, x, y int, in, out image.Image) {
        rgba := readRGBAColor(im.At(x, y))
        if index b_len*8+64 {
            if index 64 {
                bb = head[index/8]
            } else {
                bb = b[index/8-8]
            }
            bs = Byte2bits(bb)
            i = index % 8
            if bs[i] != rgba.R1 {
                if bs[i] == 0 {
                    rgba.R -= 1
                } else {
                    rgba.R += 1
                }
            }
        }
        if v := out.(*image.RGBA); v != nil {
            v.SetRGBA(x, y, rgba)
        }
    })
    if err != nil {
        return nil, err
    }
    return
}
func ReadShadowData(im image.Image) (b []byte, err error) {
    head, err := ReadShadowHeader(im)
    if err != nil {
        return nil, err
    }
    length := int(ReadShadowLength(head))
    var bk []byte = make([]byte, length*8)
    b = make([]byte, length)
    _, err = SetImage(im, func(index, x, y int, in, out image.Image) {
        if index >= 64 index length*8+64 {
            R := readRGBAColor(im.At(x, y)).R
            bk[index-64] = uint8(R 1)
        }
    })
    var bb [8]byte
    var bs []byte
    for i := 0; i length; i++ {
        bs = bk[8*i : 8*(i+1)]
        for j := 0; j 8; j++ {
            bb[j] = bs[j]
        }
        b[i] = Bits2Byte(bb)
    }
    return
}
func ReadShadowHeader(im image.Image) (b [8]byte, err error) {
    var bm [64]byte
    _, err = SetImage(im, func(index, x, y int, in, out image.Image) {
        rgba := readRGBAColor(im.At(x, y))
        if index 64 {
            bm[index] = uint8(rgba.R 1)
        }
    })
    if err != nil {
        return
    }
    var bb [8]byte
    var bs []byte
    for i := 0; i 8; i++ {
        bs = bm[8*i : 8*(i+1)]
        for j := 0; j 8; j++ {
            bb[j] = bs[j]
        }
        b[i] = Bits2Byte(bb)
    }
    return
}
func ReadShadowFlag(b [8]byte) (a [4]byte) {
    for i := 0; i 4; i++ {
        a[i] = b[i]
    }
    return
}
func ReadShadowLength(b [8]byte) uint32 {
    var bb [4]byte
    for i := 4; i 8; i++ {
        bb[i-4] = b[i]
    }
    return Bytes2Uint32(bb)
}
func OpenImage(path string) (image.Image, error) {
    im_read, err := os.Open(path)
    defer im_read.Close()
    if err != nil {
        return nil, err
    }
    im, _, err := image.Decode(im_read)
    if err != nil {
        return nil, err
    }
    return im, nil
}
//modify image
func SetImage(im image.Image, f func(index, x, y int, in, out image.Image)) (out image.Image, err error) {
    if f == nil {
        return im, nil
    }
    index := 0
    bounds := im.Bounds()
    out = image.NewRGBA(bounds)
    var m *image.RGBA = out.(*image.RGBA)
    for y := bounds.Min.Y; y bounds.Max.Y; y++ {
        for x := bounds.Min.X; x bounds.Max.X; x++ {
            m.Set(x, y, im.At(x, y))
            f(index, x, y, im, out)
            index += 1
        }
    }
    return out, nil
}
//conert any color to RABGA color.
func readRGBAColor(from_color color.Color) color.RGBA {
    return color.RGBAModel.Convert(from_color).(color.RGBA)
}
//only write to jpeg formats.
func WriteImage(path string, im image.Image) error {
    out, err := os.OpenFile(path, os.O_CREATE, os.ModePerm)
    defer out.Close()
    if err != nil {
        return err
    }
    err = png.Encode(out, im)
    if err != nil {
        return err
    }
    return nil
}
var read_in string
var write_out string
var data string
func init() {
    flag.StringVar(read_in, "in", "", "image path read in.")
    flag.StringVar(write_out, "out", "out.jpg", "image path write out.")
    flag.StringVar(data, "data", "", "data to shadow.")
}
func errHandle(err error) {
    if err != nil {
        log.Fatal(err)
    }
}
func main() {
    flag.Parse()
    if read_in == "" {
        fmt.Println("Options:")
        flag.PrintDefaults()
        return
    }
    im, err := OpenImage(read_in)
    errHandle(err)
    if data != "" {
        out, err := WriteShadow([]byte(data), im)
        errHandle(err)
        err = WriteImage(write_out, out)
        errHandle(err)
    } else {
        head, err := ReadShadowHeader(im)
        errHandle(err)
        _flag := ReadShadowFlag(head)
        if _flag != FLAG {
            fmt.Println("image doesn't have shadow data.")
            return
        }
        data, err := ReadShadowData(im)
        errHandle(err)
        fmt.Println("shadow:", string(data))
    }
}

以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。

您可能感興趣的文章:
  • Django Admin實現(xiàn)上傳圖片校驗功能
  • Django實現(xiàn)圖片文字同時提交的方法
  • Django中實現(xiàn)點擊圖片鏈接強制直接下載的方法
  • go語言讀取json并下載高清妹子圖片
  • go語言實現(xiàn)抓取高清圖片
  • GO語言實現(xiàn)批量壓縮圖片和水印
  • Go語言圖片處理和生成縮略圖的方法
  • golang實現(xiàn)通過smtp發(fā)送電子郵件的方法
  • golang基于websocket實現(xiàn)的簡易聊天室程序
  • golang使用sort接口實現(xiàn)排序示例
  • golang守護進程用法示例
  • golang實現(xiàn)http服務器處理靜態(tài)文件示例
  • golang image圖片處理示例

標簽:七臺河 上海 雅安 紹興 盤錦 宜昌 眉山 邢臺

巨人網(wǎng)絡通訊聲明:本文標題《go語言實現(xiàn)將重要數(shù)據(jù)寫入圖片中》,本文關(guān)鍵詞  語言,實,現(xiàn)將,重要,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《go語言實現(xiàn)將重要數(shù)據(jù)寫入圖片中》相關(guān)的同類信息!
  • 本頁收集關(guān)于go語言實現(xiàn)將重要數(shù)據(jù)寫入圖片中的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    性欧美丰满熟妇xxxx性久久久| 国精产品乱码一区一区三区四区| 丝袜美腿诱惑一区二区三区| av亚洲精华国产精华精华| 福利在线视频导航| 99精品在线观看视频| 国产精品福利无圣光在线一区| 亚洲1区2区3区4区| 免费在线观看亚洲| 欧美日韩和欧美的一区二区| 中文字幕免费高清在线| 欧美性狂猛xxxxxbbbbb| 国产一区二区在线免费观看| 欧美国产精品va在线观看| 欧美伦理片在线观看| 久久精品国产999大香线蕉| 欧美伦理一区二区| 欧美日韩国产电影| 亚洲精品中文字幕在线观看| 懂色一区二区三区免费观看| 欧美成人亚洲高清在线观看| jlzzjlzz欧美| 成人午夜在线免费| 国产欧美日韩精品丝袜高跟鞋| 麻豆国产精品777777在线| 亚洲成a人片在线| 国产写真视频在线观看| 国产超碰精品| 国产女优在线播放| 国产乡下妇女做爰毛片| 一区二区三区四区免费观看| 免费在线视频一区二区| 欧美男同性恋视频网站| 美女黄视频在线播放| 国产精品12p| 亚洲精一区二区三区| 伊人成综合网伊人222| 日韩欧美一区二区在线观看| 日韩欧美在线免费观看视频| 爱爱视频免费在线观看| 1024国产精品| 丰满人妻中伦妇伦精品app| 欧美一区二区三区影视| 亚洲欧美日本国产专区一区| 伊人av综合网| 少妇人妻大乳在线视频| 国产精品宾馆在线精品酒店| 少妇高潮久久久| 亚洲区综合中文字幕日日| 亚洲精品精品一区| 日本精品600av| 久久夜色精品亚洲噜噜国产mv| 视频一区国产视频| 精品国产一区二区三区噜噜噜| 香港一级纯黄大片| 永久免费看片在线观看| 日韩专区一卡二卡| 色在线视频观看| 日韩国产成人精品| 不卡影院免费观看| 99热在线精品观看| 色网站在线免费观看| 亚洲精品狠狠操| 国产91在线|亚洲| 天堂社区在线视频| 亚洲精品在线视频免费观看| 久久麻豆精品| 日本黄色免费观看| 成年网址网站在线观看| 欧美精品123区| 国产精品久久久乱弄| 国内成+人亚洲+欧美+综合在线| 免费看日本一区二区| 亚洲天堂网在线视频| 在线播放日韩专区| 亚洲综合在线中文字幕| 亚洲国产一区二区三区四区| 在线视频在线视频7m国产| 日本美女黄色一级片| 在线观看午夜av| 久久发布国产伦子伦精品| 在线免费av网站| 午夜精品在线观看| 四虎影视永久免费在线观看一区二区三区| 亚洲成av人片一区二区| 在线观看视频91| 日韩在线观看视频网站| 久久精品99国产精品日本| 99精品视频在线免费播放| 香蕉久久夜色精品国产| 伊人男人综合视频网| 国产乱叫456在线| 99久久亚洲一区二区三区青草| 国产一区91| 97在线精品国自产拍中文| 国产精品国产三级国产专区53| 男人久久精品| 久久久国产高清| 四虎中文字幕| 久久97精品久久久久久久不卡| 色妞一区二区三区| 成熟人妻av无码专区| jizz一区二区三区| 加勒比成人在线| 午夜精品一区二区在线观看的| 久久精品资源| 美女福利一区二区三区| 欧美日韩激情在线| 国产激情综合| 美女黄视频在线播放| 欧洲一区二区三区在线| 久久久国产精品网站| 清纯粉嫩极品夜夜嗨av| www.日韩系列| 天堂在线资源网| 午夜性爽视频男人的天堂| 西西444www无码大胆| 久久国产精品99精品国产| 蜜臀99久久精品久久久久久软件| 国产wwwwxxxx| 网站永久看片免费| 久久爱av电影| 日韩亚洲欧美综合| 亚洲av成人无码网天堂| 国产亚洲精品久久久优势| 国产亚洲欧美日韩在线一区| 91在线porny国产在线看| 免费高清视频日韩| 欧洲激情视频| 精品国内一区二区三区免费视频| 精品国产青草久久久久福利| 亚洲av无码一区二区三区网址| 91亚洲精品国偷拍自产在线观看| 成人免费看片98| 欧美一区二区三区久久综合| 日本视频在线免费观看| 国产精品毛片在线看| 女人黄色一级片| 乱插在线www| 久久av秘一区二区三区| 亚洲一区二区三区高清视频| 伪装者在线观看完整版免费| 欧美激情一区二区三区| 亚洲午夜精品在线| 成人午夜免费在线视频| 国产精品18久久久久久久久| 色一情一乱一伦一区二区三区| 88av看到爽| 精品69视频一区二区三区Q| 18啪啪污污免费网站| 亚洲三区在线观看| xxxxwwww在线免费观看| 夜夜摸视频网| 久久影视电视剧免费网站| 亚洲AV无码国产精品午夜字幕| 久久―日本道色综合久久| 91影院在线免费观看视频| 国产丶欧美丶日本不卡视频| 欧美成人二区| 亚洲五码在线| 秋霞午夜在线观看| 91九色在线看| 中文字幕无码精品亚洲资源网久久| 影视先锋久久| 一区二区成人av| 亚洲一区二区三区久久久| 成年人看片网站| 天堂中文在线资| 国产奶头好大揉着好爽视频| 国产欧美一区二区三区在线| 亚洲1卡2卡3卡4卡乱码精品| 欧美极品在线| 鲁丝一区鲁丝二区鲁丝三区| 午夜久久久久久久久| 欧美日韩国产在线看| 黄色一级片网址| 无遮挡在线观看| 欧美精品久久久久久久多人混战| gogogogo高清视频在线| 美女网站黄页| 26uuu精品一区二区三区四区在线| 四虎4545www精品视频| 99久久精品免费看国产小宝寻花| 亚洲羞羞网站| 色妹子一区二区| 紧缚捆绑精品一区二区| 国产又粗又猛视频| 欧美日本韩国一区二区三区视频| 色偷偷亚洲第一成人综合网址| 神马久久桃色视频| 欧美肥臀大乳一区二区免费视频| 亚洲高清不卡在线观看| 欧美三级日本三级少妇99| 18视频在线观看| 黄色性视频网站| 亚洲第一视频| 国产xxxxx18| www.成人在线.com| 韩国精品福利一区二区三区| 黄色在线观看www| 999av小视频在线| 亚洲成av人在线观看| 国产成人香蕉在线视频fuz| 久久av国产紧身裤| 99久久婷婷国产综合精品青牛牛| 国产高清美女一级毛片久久| 日本一区二区三区在线不卡| 69久久精品无码一区二区| 灌醉mj刚成年的大学平面模特| 国产激情在线看| 国产日韩一区二区在线| 国产一区二区在线观看视频| 大杳蕉精品视频在线观看| 久久久久国产| 嫩草嫩草嫩草| 中文字幕伦理片| 亚洲精品无码久久久久久| 久久精品亚洲国产奇米99| 国产精品99久久久久久人| 国产又粗又黄又爽的视频| 视频在线一区二区| 日韩国产精品一区二区| wwwwxxxx日韩| 国产精品久久久久久久久影视| 一女被多男玩喷潮视频| 美女免费视频黄| 精品国产sm最大网站| 日韩精品久久久毛片一区二区| 国产精品乱码久久久| 成人日韩视频| 最新av免费在线| 亚洲伊人观看| 国产精品剧情一区二区在线观看| 欧美国产日韩a欧美在线观看| 亚洲高清中文字幕| 亚洲国产精品va在线| 国产精品一区二区精品| 日韩视频免费在线播放| mm131丰满少妇人体欣赏图| 久久国产日韩欧美精品| 欧美成人综合在线| 亚洲一区二区福利| 在线观看中文字幕码| 91精品婷婷国产综合久久蝌蚪| 成人3d动漫一区二区三区| 欧洲精品久久| 日韩一区二区在线免费| 真人做人试看60分钟免费| 国产在线拍揄自揄拍无码| 日日噜噜噜夜夜爽爽狠狠| 丁香激情五月少妇| 韩国精品一区二区三区六区色诱| 欧美少妇bbb| 精品久久国产视频| 电影一区二区在线观看| 午夜影院网站| 波多野结衣手机在线视频| 在线日本成人| 久久理论电影| 天天噜天天色| 国产成人毛片| 久久久久一本一区二区青青蜜月| 波多野结衣视频网址| 精品日产卡一卡二卡麻豆| 麻豆传媒一区二区| 国产成人精品一区二区三区福利| 欧美精品激情在线| caoporn免费在线视频| 欧美在线观看天堂一区二区三区| 在线一区视频| 日本影音先锋电影| 久久99热在线观看7| 久久婷婷人人澡人人喊人人爽| 久久久亚洲精品无码| 96精品久久久久中文字幕| 欧美疯狂爱爱xxxxbbbb| 巨大荫蒂视频欧美另类大| 成熟妇人a片免费看网站| 日韩影院在线| 麻豆传媒在线看| 国产精品乱码一区二区三区视频| 国产成人亚洲精品青草天美| 久久久三级国产网站| 国产精品国产三级国产试看| 日韩中文字幕组| 乌克兰美女av| 国产麻豆精品theporn| 中文文精品字幕一区二区| 欧美日韩国产高清电影| 免播放器亚洲| 久久99精品一区二区三区三区| 丰满少妇大力进入| 国产精品传媒| 国产伦理在线观看| 久久精品国产一区二区电影| 四虎成人免费| 成人黄色免费电影| 日本高清免费在线视频| 欧美极品少妇xxxxⅹ裸体艺术| 日本猛少妇色xxxxx免费网站| 在线观看免费污视频| 99热这里都是精品| 三级福利片在线观看| 操日韩av在线电影| 91视频免费在线| 国产综合图区| 国产免费不卡视频| 国产一区三区三区| 夜夜狠狠擅视频| 91超碰在线免费观看| 国产一区二区久久久| 成人观看免费完整观看| 蜜桃视频在线入口www| 波多野结衣av在线观看| 红桃视频亚洲| 一边摸一边做爽的视频17国产| 爆操欧美美女| 亚洲精品无播放器在线播放| 久久久亚洲av波多野结衣| 日韩毛片在线观看| 欧洲激情视频| 国产精品理论片在线观看| 欧美日本二区| 欧美本精品男人aⅴ天堂| 99精品99久久久久久宅男| 图片区乱熟图片区亚洲| 中文字幕乱码在线观看| 羞羞视频网站在线观看|