ฉันต้องการแปลงภาพ JPEG 640x480 เป็น 320x240 ฉันรู้ว่ามันสามารถทำได้โดยการถอดรหัสภาพ JPEG เป็น YCbCr ดิบปรับขนาดและเข้ารหัสเป็น JPEG อีกครั้ง แต่เป็นไปได้ด้วยการเข้ารหัส JPEG เพื่อขยายภาพโดยตรงโดยไม่ต้องถอดรหัส?
ฉันต้องการแปลงภาพ JPEG 640x480 เป็น 320x240 ฉันรู้ว่ามันสามารถทำได้โดยการถอดรหัสภาพ JPEG เป็น YCbCr ดิบปรับขนาดและเข้ารหัสเป็น JPEG อีกครั้ง แต่เป็นไปได้ด้วยการเข้ารหัส JPEG เพื่อขยายภาพโดยตรงโดยไม่ต้องถอดรหัส?
คำตอบ:
คุณสามารถทำได้ แต่เฉพาะในกรณีที่วิวเวอร์ JPEG ของคุณรองรับส่วนขยายSmartScale JPEG jpegtranสามารถทำเช่นนี้สำหรับขนาดของ N / 8 โดยมี N = 1..16 โดยทั่วไปขนาดบล็อก DCT จะเปลี่ยนจาก 8x8 เป็นอย่างอื่นระหว่างการบีบอัดใหม่ (เช่น 4x4) ซึ่งปรับขนาดภาพได้อย่างมีประสิทธิภาพ
หมายเหตุ: SmartScale เปิดตัวในไลบรารี่ libjpeg เวอร์ชัน 8แต่ไม่รองรับผู้ชมอย่างกว้างขวาง
เอกสารที่อธิบายถึงการเปลี่ยนแปลงในรายละเอียดที่สามารถพบได้ที่นี่: วิวัฒนาการของ JPEG
แก้ไข:ดูเหมือนว่าผู้ชมส่วนใหญ่ไม่สามารถแสดงภาพเหล่านี้ได้จริงเนื่องจากใช้ libjpeg-turbo และ libjpeg-turbo เลือกที่จะไม่ใช้คุณสมบัตินี้ ในความเป็นจริงฉันได้ลองใช้โปรแกรมหลายโปรแกรม (บน Ubuntu 14.04 และ Windows 8) และไม่มีใครสามารถแสดงรูปภาพที่ลดขนาดที่สร้างโดยใช้ jpegtrans ได้ แม้แต่ Photoshop, IrfanView และ GIMP ก็ล้มเหลว
แก้ไข 2:อันที่จริงอูบุนตูและ Fedora ไม่ได้จัดส่งไลบรารี่ libjpeg8 แต่จะแทนที่ด้วย libjpeg-turbo version อย่างสมบูรณ์ ดังนั้นไม่มีโปรแกรมใดที่สามารถอ่านไฟล์ JPEG SmartScale ได้บันทึกสำหรับไบนารีบางตัวที่เชื่อมโยงกับไลบรารี libjpeg8 ดั้งเดิม
คำตอบสั้น ๆ คือไม่ รูปภาพ JPEG ใช้การบีบอัดซึ่งหมายความว่าแต่ละไบต์เอาท์พุทขึ้นกับสิ่งอื่นทั้งหมด หากคุณเปลี่ยนจำนวนไบต์ของรูปภาพคุณต้องขยายและบีบอัดใหม่
จะมีการสูญเสียคุณภาพอันเป็นผลมาจากการบีบอัดใหม่เนื่องจาก JPEG ใช้การบีบอัดแบบสูญเสีย แต่คุณจะสูญเสียคุณภาพต่อไปโดยการแบ่งความละเอียดออกเป็นสี่ส่วน คุณสามารถได้คุณภาพที่ดีที่สุดจากภาพที่มีความละเอียดต่ำโดยการเพิ่มระดับคุณภาพ JPEG เมื่อทำการบีบอัดซ้ำแม้ว่าหลักสูตรนี้จะเพิ่มขนาดไฟล์
หากคุณทำงานกับรูปภาพเป็นจำนวนมากวิธีที่ดีที่สุดคือทำงานในรูปแบบการบีบอัดแบบไม่สูญเสียเช่น PNG เพื่อแปลงเป็น JPEG เฉพาะเมื่อภาพได้รับการสรุปแล้วโดยแน่นอนว่าคุณมีพื้นที่ดิสก์เพิ่มเติม