
眾所周知,所有文件都是資料的簡單容器。PNG
文件也不例外。
PNG 檔案基本上只是指彩色像素的矩形網格,因此它不可能那麼複雜 - 當然不像視訊甚至 GIF 那麼複雜。
我的問題是,如何僅使用記事本從無到有創建 PNG?然後可以在瀏覽器(例如 Chrome)中開啟該文件,瀏覽器會將其識別為圖像。
一個由四個彩色像素組成的小正方形就是一個很好的例子。
使用 Paint 嘗試查看正在發生的情況會產生有趣的結果。
如果使用 Paint 建立一個如下所示的 PNG 檔案(它非常小,2x2 像素,因此您可能需要放大)
產生的文字檔案如下所示:
IHDR ýÔšs sRGB ®Îé gAMA ±üa pHYs à ÃÇo¨d IDATWcè`ýÿ‰Ai£½Ç !ß=î_— IEND®B`‚
但幕後到底發生了什麼事?
澄清一下,問題不是如何創建任何 PNG 文件,而是如何使用文字建立符合特定條件的 PNG 文件,例如彩虹的 7 種顏色的線?
答案1
如何僅使用記事本從無到有創建 PNG?
好容易。使用十六進制編輯器會更容易(但仍然很困難)。
本質上,您必須創建一個格式與PNG規格。
檔案頭必須以 PNG 簽章開頭,該簽章由以下十進位值組成:
137 80 78 71 13 10 26 10
無法使用記事本輸入十進位 10(換行符號)(因此建議使用十六進位編輯器)來建立檔案。
您還需要能夠計算 CRC 值並遵循許多複雜的區塊排序規則。
如果您閱讀上面連結的規範,您會發現手動建立 PNG 是多麼複雜。
使用支援 PNG 的圖形編輯器會容易得多。
答案2
答案3
答案4
實際上文件不僅僅是資料的容器。它們是二進位資料流。每種文件類型對於二進位流的哪些部分是哪些資料有不同的佈局。
在記事本中開啟圖像將使二進位流被解釋為人類語言中的字元。但是,我們不會使用與我們定義的特定語音語言中的字元相對應的二進位來製作檔案。因此,記事本可能會也可能不會對二進位流進行任何有用的解釋,以便能夠新增和刪除 PNG 解釋器可識別的資料。
如果您確實對如何從無到有創建PNG 檔案感到好奇,則必須使用數字(最好是二進位或十六進位),使用十六進位編輯程式從磁碟讀取二進位串流並以16 為基數顯示它你。
請參見大衛波斯蒂爾的回答