เท่าที่ฉันรู้ JPG เป็นรูปแบบการบีบอัดรูปภาพที่สูญหาย
ในขณะเดียวกัน BMP เป็นรูปแบบภาพที่ไม่มีการบีบอัดโดยทั่วไป ซึ่งมีโครงสร้างไฟล์ประกอบด้วย bitmapFileHeader (14 ไบต์) และ bitmapInfoHeader (40 ไบต์) ส่วนที่เหลือเป็นข้อมูลพิกเซล
ดังนั้นฉันต้องผ่าน 54 ไบต์แรกและจัดเก็บเป็นตัวแปร HEADER และเก็บส่วนที่เหลือไว้ในตัวแปร PIXELDATA
ในสถานะนี้ ฉันสามารถเข้ารหัสและถอดรหัส PIXELDATA ได้อย่างอิสระ และสามารถรวมเข้ากับ HEADER อีกครั้ง เพื่อรักษาความสมบูรณ์ของไฟล์
แต่ในกรณีของ JPG จะแตกต่างออกไป ฉันต้องการลองอ่านพิกเซลด้วยตนเอง แต่ฉันไม่รู้ว่าไบต์ดัชนีอยู่ในตำแหน่งใด (ต่างจาก BMP ที่ข้าม 54 ไบต์)
ฉันใช้ Python กับไลบรารีต่างๆ เช่น PIL หรือ Numpy ทั้งคู่สามารถอ่าน Pixels ได้ แต่เมื่อบันทึกเป็นไฟล์ JPG ใหม่ มันแตกต่างจากต้นฉบับตรงที่:
- การเปรียบเทียบเช็คซัม SHA-256
- ขนาดไฟล์ที่แตกต่างกัน
- สีของพิกเซลบางส่วนเปลี่ยนไปจากเดิมหากคุณดูรายละเอียดเพิ่มเติม
คำถามของฉันคือ มีวิธีอื่นในการอ่านข้อมูลพิกเซลของไฟล์ JPG แต่ยังคงให้ความสมบูรณ์ของไฟล์ JPG ต้นฉบับเมื่อบันทึกในไฟล์ JPG ใหม่หรือไม่ (การตรวจสอบ ขนาดไฟล์ และสีของพิกเซลเหมือนกัน)