技術筆記
共 52 篇文章PNG 壓了三遍只減 426 位元組:無損壓縮的真實邊界
11 張 PNG 逐檔實測:66 組裡 55 組省 0 位元組,產物餵回去壓滿三遍累計只降 426 B、0.19%。IDAT 佔了 99.97% 以上體積,DEFLATE 的上限由圖像內容定死,還能減位元組的只有顏色表示這一維。
WebP 轉 PNG 後體積漲了幾倍:什麼時候必須轉,怎麼把漲幅壓住
WebP 轉 PNG 實測漲 1.4194 倍到 80.8547 倍,像素卻 diffPixels = 0:漲的是 RGBA 容器而不是畫質。講清什麼時候必須轉、怎麼把漲幅壓住。
截圖縮到四分之一,小字糊成一團的三種原因
截圖縮到 320×180 後小字糊成一團,縮到 1024×576 體積卻從 62,744 B 漲到 79,480 B。三個原因都在模板裡:預設取樣品質 low、只有一處 drawImage、畫布永遠等於請求值。
同樣裁 300×300,頭像為什麼總偏右下角半格
同一張圖裁兩次都是 300×300,疊在純色底上卻差半格:居中那次 (oldW - w) / 2 也交給 Math.round,半數一律朝正無窮進位,於是左邊距 89、右邊距 88。
按每月 1.7 倍預估 18 個月,腳本和表格為什麼給出兩個數
首月 2、每月乘 1.7、共 18 個月,閉式與逐項累乘給出兩個尾數,差在小數第 15 位。浮點、冪運算與顯示分檔各管一段,真正寫進匯報會出事的是項數口徑。
介面 JSON 貼成 PHP 陣列,哪些值會悄悄變形
把介面回傳貼成 PHP 陣列後,超過 2^53 的訂單號會少 1,9223372036854775807 相差 193,{} 與 [] 塌成同一種寫法,帶尖括號的值複製回來還會少字——變形幾乎都出在第一步 JSON.parse。
/26 到底能裝幾臺主機:可用主機數、廣播位址與 /31 的例外
/26 的 62 臺來自 2 的 6 次方減 2,可這條公式只在前綴不大於 30 時成立:/31 點對點實測可用 2 個位址,/32 只給 1 個,閘道還要再從可用位裡吃掉 1 個。
表單只跑 Luhn,為什麼會放過 4242 4242 4242 4242
4242424242424242 的校驗和恰好 80,而 Luhn 只核對這一個餘數:抄錯一位實測 1008 個變體一個不漏,同奇偶槽位對調的 4410 組卻 100.00% 看不見,隨手編的號也有約 1/10 過關。
把品質調到 100 再壓一次,圖片其實一個位元組都沒動
品質滑到 100 走的是第 180 行原檔直通,208986 B 進 208986 B 出、節省 0 B;99 檔反倒頂到 333872 B。還記了 PNG 先轉 JPEG 的平方品質、透明遺失與兩個不一致的節省算法。
同一個數打兩遍,最小公倍數成了 94906266.99999999:先乘後除撞上限的是中間量
同一個數打兩遍就露餡:輸入 94906267, 94906267 時,最小公倍數成了 94906266.99999999——先乘後除撞上限的是中間量,不是結果。
副檔名從最後一個點算起:LICENSE、.gitignore、archive.tar.gz 為什麼會漏改
副檔名只認最後一個點:27 行樣本 UPPER 改 11 行、lower 改 9 行、Title 改 19 行,LICENSE 與 .gitignore 原樣傳回,archive.tar.gz 只動 gz,帶路徑還會改到目錄名稱。
批次建立目錄的指令碼裡,編號補零和 CON 這兩個坑最容易被忽略
同一份 150 行的清單,BAT 寫 157 行 / 3544 位元組,PowerShell 寫 156 行 / 11049 位元組;補零位數選小不會重名,CON 卻會原樣進指令碼。