http://2.wjsou.com/BMP/index.html
想試試chatGPT4生成,還是要手工改
php 寫一個網頁界面上可以選擇一張bmp圖片,界面上就顯示這張bmp圖片,
點生成取模按鈕,在圖片下方會顯示這張bmp圖片的取模數據。
取模規則是按界面設置的,是否橫向取模或縱向取模 ,是否從左到右,是否從下到上,是否高位在前或高位在后,是否字節內像素數據反轉,這些可以在界面切換。最后的數據是16進制字節數組,類似于下面格式
//圖片:D:\test.bmp
//數據排列:橫向從左到右從上到下 高位在前,寬:16,高:16
//點陣數據:
char Msk[]={
0x00, 0x00, 0x3E, 0x20, 0x20, 0x3C, 0x22, 0x02, 0x22, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
支持php 5.6及以上版本。其它版本我沒有測。
沒有用插件gd2等。用原始的讀文件。
讀每個點的顏色(放棄這個方案)
這個圖片處理要用到插件,就不用這個方案。gd2要php7.2才支持。用這個的好處就是可以任意圖片png,jpg,bmp32位等。
bmp解析,直接讀數據
倒過來,即0000003E處是像素點陣數據。其它信息都不太重要。
單色點陣數據在bmp中的格式
?
取模規則
可以自由組合。參照windows版:
對照驗證
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><title>單色bmp圖片取模工具 php源碼</title>
</head>
<body><form id="uploadForm" enctype="multipart/form-data"><input type="file" name="image" accept=".bmp" required><br><input type="checkbox" name="horizontal"> 橫向取模(不勾選為縱向)<br><input type="checkbox" name="secondByteOnRight" checked> 第二字節在右(不勾選為第二字節在在下)<br><input type="checkbox" name="topToBottom" checked> 從上到下(無效)<input type="checkbox" name="leftToRight" checked> 從左到右(無效)<br><input type="checkbox" name="highBitFirst" checked> 高位在前(即大端模式)<input type="checkbox" name="pixelReverse" checked> 像素反轉(即黑白顛倒)<br><button type="button" onclick="submitForm()">生成取模</button></form><br><img id="previewImage" style="display:none;"><pre id="modResult"></pre><script>function submitForm() {var formData = new FormData(document.getElementById('uploadForm'));fetch('process_image.php', {method: 'POST',body: formData,}).then(response => response.json()).then(data => {document.getElementById('previewImage').src = data.imageUrl;document.getElementById('previewImage').style.display = 'block';document.getElementById('modResult').textContent = data.modData;});}</script>
</body>
</html>