Score:1

วิธีแปลงไฟล์ PNG ขนาด 32MB เป็น 200Kbs โดยไม่สูญเสียสี

ธง us

ฉันมีรูปภาพสองสามภาพที่มีขนาด 32MB และฉันต้องการเปลี่ยนขนาดจาก 32MB เป็น 100Kbs หรือขนาด KB ใดๆ โดยไม่ส่งผลต่อสี

คำสั่งที่ฉันพยายามคือ:

muhammad@muhammad-mohsin:~/scans$ find . -iname '*.png' -exec mogrify -format jpg "*.png" {} +


muhammad@muhammad-mohsin:~/$ find . -พิมพ์ f -iname \*.png -ลบ


muhammad@muhammad-mohsin:~/$ find . -iname '*.jpg' -exec mogrify -define jpeg:extent=300kb -strip -quality 90 -scale 90% *.jpg {} +

ที่นี่ ก่อนอื่นฉันแปลง PNG เป็น JPG ที่ลดขนาดจาก 32Mbs เป็น 5.8Mbs และทุกอย่างยังคงเหมือนเดิม แต่เมื่อฉันใช้คำสั่งที่ 3 มันจะลบสีพื้นหลังในรูปภาพและทำให้ภาพเบลอในระดับสีเทา

อย่างไรก็ตาม ข้อความยังสามารถอ่านได้ แต่สีและโลโก้พื้นหลังไม่สามารถอ่านได้

ฉันจะบรรลุสิ่งนี้ด้วยการแปลง mogrify หรือเครื่องมืออื่น ๆ ได้อย่างไร ฉันพยายามทุกวิถีทางจนถึงตอนนี้

นี่เป็นส่วนหนึ่งของภาพต้นฉบับ

นี่เป็นส่วนหนึ่งของภาพที่เปลี่ยนแปลงหลังจากคำสั่ง

Knud Larsen avatar
by flag
30MB png ถึง 300kb jpg â ตัวอย่าง: `convert Sample.png -resize 22% S300.jpg` .... แสดงว่าคุณมีคุณภาพดีมาก แต่ภาพเล็กลง
LearningROR avatar
us flag
@KnudLarsen ขอบคุณสำหรับมัน ช่วยฉันจริงๆ เราสามารถเพิ่มคุณสมบัติอื่นเพื่อทำให้สีของภาพคมชัด/สว่าง ฯลฯ ได้หรือไม่? ฉันใช้: `convert image.png -resize 35% S300.jpg` และส่งคืนขนาด `763Kbs` ใกล้เข้ามาแล้ว!
LearningROR avatar
us flag
@KnudLarsen เราสามารถดำเนินการแบทช์สำหรับคำสั่งนี้ได้หรือไม่ เพื่อให้รูปภาพทั้งหมดในโฟลเดอร์และโฟลเดอร์ย่อยจะได้รับคำสั่งนี้ ฉันกำลังพยายาม `ค้นหา . -iname '*.png' -exec converter -resize 60% -quality 60 "*.jpg" {} +` แต่ไม่ได้ผล
Score:4
ธง om

เป็นเพราะวิธีการทำงานของการบีบอัด JPEG จะพยายามปัดเศษพิกเซลที่อยู่ติดกันซึ่งคล้ายกันให้มีค่าใกล้เคียงกัน สิ่งนี้ทำให้สูญเสียรายละเอียดและการปิดกั้น

สิ่งนี้จะเห็นได้ชัดเจนขึ้นเมื่อคุณเพิ่มระดับการบีบอัด ซึ่งก็คือ อย่างแน่นอน คุณกำลังทำอะไรอยู่ นอกจากนี้คุณกำลังดำเนินการในสองขั้นตอน:

  1. การบีบอัดแบบไม่สูญเสียข้อมูล (PNG) เป็นแบบไม่สูญเสียข้อมูล (JPEG)
  2. การสูญเสียการบีบอัดแบบสูญเสีย

คุณจะ อาจจะ ได้รับผลลัพธ์ที่ดีขึ้นโดยการลดการสูญเสียไปยังคุณภาพขั้นสุดท้าย ดังนั้นจึงใช้การบีบอัดแบบสูญเสียเพียงครั้งเดียวเท่านั้น เช่น โดยใช้ jpeg:extent=300kb -แถบ -คุณภาพ 90 -สเกล 90% ในการแปลงครั้งแรก

นอกจากนี้ คุณจะไม่พูดอะไรเกี่ยวกับขนาดของภาพและระดับของรายละเอียด อาจเป็นไปไม่ได้ที่จะลดขนาดลงเป็น 300kB และคงคุณภาพที่ต้องการไว้

เพื่อกำจัดรอยด่างบนพื้นหลัง คุณสามารถลองใช้เกณฑ์กับเอกสารของคุณในซอฟต์แวร์แก้ไขภาพบางตัว โดยบังคับให้สิ่งที่น้อยกว่าสีเทาเฉดหนึ่งเป็นสีขาว เป็นต้น

อย่างไรก็ตาม ไม่ว่าคุณจะทำอะไรก็ตาม การบีบอัดจากรูปแบบที่ไม่มีการสูญเสียข้อมูลขนาด 30MB เป็นรูปแบบที่มีการสูญเสียข้อมูลขนาด 300kB จะ ทำให้คุณภาพลดลงอย่างเห็นได้ชัด

LearningROR avatar
us flag
ขอบคุณมากสำหรับการตอบกลับโดยละเอียด คุณพูดอะไรในกรณีนี้หลังจากขนาดไฟล์ 5.8MBs กับ JPG เราสามารถใช้เครื่องมือบีบอัดเพื่อลดขนาดลงเล็กน้อยได้หรือไม่?
LearningROR avatar
us flag
ฉันมีไฟล์ทั้งหมดเป็น PNG ฉันจะใช้ `jpeg:extent=300kb -strip -quality 90 -scale 90%` เพียงครั้งเดียวในกรณีนี้ได้อย่างไร
vidarlo avatar
om flag
คุณสามารถใช้มันในการแปลงครั้งแรกของคุณ และใช่; คุณสามารถลองใช้เช่น ขนาด 2MB และจะนำไปสู่ผลลัพธ์ที่ดีกว่าเป้าหมาย 300kB
LearningROR avatar
us flag
ขอขอบคุณ. มีเหตุผล. +1 สำหรับการตอบสนองที่ดี :)
Peter Cordes avatar
fr flag
*เข้ารหัสเป็นสำเนาของกันและกัน* - JPEG *เท่านั้น* ทำ DCT quantization โดยไม่มีการคาดการณ์ภายใน เช่น "คัดลอกบล็อกจาก 29 พิกเซลในทิศทางนี้" บางทีคุณอาจนึกถึงเฟรม h.264 / h.265 I (https://en.wikipedia.org/wiki/High_Efficiency_Image_File_Format) ฉันเดาว่าตัวเข้ารหัส JPEG ที่ทำการวัดปริมาณเทรลลิสอาจพยายามเข้ารหัสบล็อกใกล้เคียงด้วยวิธีเดียวกัน ดังนั้นขั้นตอนการบีบอัดแบบไม่สูญเสียขั้นสุดท้ายสามารถบันทึกบิตได้มากขึ้น
Peter Cordes avatar
fr flag
หรือบางทีคุณอาจหมายถึงในระดับท้องถิ่นที่ต้องการปัดเศษส่วนประกอบ DCT ความถี่สูงให้เป็นศูนย์ ทำให้พิกเซลที่อยู่ติดกันเหมือนกันมากขึ้น เอฟเฟกต์พิกเซลที่คล้ายกันนั้น *ไม่ใช่* ผลลัพธ์ของการเข้ารหัสพวกมันเป็นสำเนาของกันและกัน แต่แท้จริงแล้วคือการเข้ารหัสโดยมีค่าสัมประสิทธิ์ความถี่เชิงพื้นที่ต่ำเป็นส่วนใหญ่
vidarlo avatar
om flag
@PeterCordes ขอบคุณสำหรับการแก้ไข :)
Peter Cordes avatar
fr flag
"*ความพยายามที่จะปัดเศษพิกเซลที่อยู่ติดกันซึ่งคล้ายกันให้มีค่าใกล้เคียงกัน*" ยังคงไม่ใช่วิธีการใช้งานจริง นั่นอาจเป็นส่วนหนึ่งของผลลัพธ์ แต่ก็ไม่ง่ายอย่างนั้น การบีบอัดแบบสูญเสียของ JPEG เกิดขึ้นในโดเมนความถี่หลังจาก [an 8x8 DCT](https://en.wikipedia.org/wiki/Discrete_cosine_transform#Compression_artifacts) ไม่ใช่พิกเซลที่อยู่ติดกันจริง คุณจึงได้รับ [วัตถุ "เรียกเข้า"](https://en.wikipedia.org/wiki/Ringing_artifacts) บริเวณขอบที่คมชัด และการประมวลผลบล็อก 8x8 ที่แยกต่างหากเป็นสาเหตุที่ทำให้ JPEG คุณภาพต่ำถูกบล็อก
Peter Cordes avatar
fr flag
ดูเพิ่มเติม [รูปภาพ .jpg ที่เหมือนกันทุกประการสองรูปโดยมีรูปภาพหนึ่งมีขนาดไฟล์มากกว่าสองเท่าของอีกรูปภาพหนึ่ง - เพราะเหตุใด](https://photo.stackexchange.com/a/125291) สำหรับคำอธิบายเพิ่มเติมเกี่ยวกับวิธีบีบอัด JPEG และ สิ่งที่ทำให้ภาพบางภาพบีบอัดได้ยากขึ้นหรือง่ายขึ้นโดยไม่มีความผิดเพี้ยนอย่างมีนัยสำคัญ (ฉันเขียนคำตอบนั้นพร้อมรายละเอียดทางเทคนิค แต่มุ่งเป้าไปที่ผู้ชมที่ยังไม่รู้ว่าการบีบอัดภาพทำงานอย่างไร)
Score:2
ธง by

ฉันกำลังพยายาม หา . -iname '*.png' -exec แปลง -resize 60% -คุณภาพ 60 "*.jpg" {} + แต่นั่นไม่ได้ผล

อ้างอิง https://superuser.com/questions/71028/batch-converting-png-to-jpg-in-linux

$ ls -1 *.png | xargs -n 1 bash -c 'แปลงคุณภาพ 60 "$0" "${0%.*}.jpg"'

แปลงตัวอย่างของฉัน 31MB.png เป็น 1.4MB.jpg ... คุณอาจต้องทำซ้ำเช่น $ ls -1 *.PNG | ... เป็นต้น

อ้างอิง ความคิดเห็นโดย @steeldriver: "ดีกว่าเล็กน้อยคือ xargs -d '\n' -n 1 "

LearningROR avatar
us flag
ขอบคุณ คุณคนุด ฉันทำไปแล้วด้วย `find . -iname '*.png' -exec mogrify -resize 60% -quality 60 -format jpg *.png {} +` แต่ยอมรับและโหวตคำตอบของคุณที่ทำให้ฉันไปในทิศทางที่ถูกต้อง
hr flag
โปรดทราบว่า `ls -1 | xargs -n 1` จะแตกหากชื่อไฟล์ใดมีช่องว่าง คุณสามารถทำให้มัน *ดีขึ้นเล็กน้อย* โดยใช้ `xargs -d '\n' -n 1` ซึ่งจะใช้งานได้ยกเว้นชื่อไฟล์ที่มีการขึ้นบรรทัดใหม่ - คุณสามารถจัดการสิ่งเหล่านั้นได้เช่นกันโดยใช้ตัวคั่น null เช่น `printf '%s\0' *.png | xargs -0 -n 1 ... `. อย่างไรก็ตาม เนื่องจากคุณกำลังแยก bash shell ใหม่สำหรับทุก ๆ ไฟล์ ฉันสงสัยว่าสิ่งทั้งหมดจะทำได้อย่างง่ายดายโดยใช้ shell loop `for f in *.png; ทำ ... "$f" "${f%.*}.jpg"; เสร็จแล้ว'
Knud Larsen avatar
by flag
@steeldriver : ตกลง `ls -1` ฯลฯ ฯลฯ เป็นเพียงชุดตัวเลือกเดียวที่เป็นไปได้ ฉันสามารถเพิ่มข้อเสนอแนะของคุณในคำตอบ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา