วิธีบีบอัดเฟรมเกมตามภาพเคลื่อนไหวเฟรมให้น้อยที่สุดบนดิสก์


19

ฉันพัฒนาเกมเช่น Age of Empire (อาคารบนแผนที่) และสำหรับอาคารทุกหลังฉันมีแผ่นสไปรต์สำหรับภาพเคลื่อนไหว ฉันใช้ภาพเคลื่อนไหวแบบเฟรมต่อเฟรมเพื่อทำให้สิ่งมีชีวิตเคลื่อนไหว (ไม่ทราบวิธีอื่นใด) ฉันสังเกตเห็นว่าโฟลเดอร์ทรัพยากรของฉันมีขนาดใหญ่มากเนื่องจากภาพที่ฉันใส่เข้าไป

เกมเช่น CoC และ Age of Empires มีขนาด apk ต่ำกว่า 50 Mg อย่างไร ฉันขาดอะไรบางอย่างที่นี่เมื่อพูดถึงการพัฒนาเกม

ขอขอบคุณ

แก้ไข: ข้อมูลเพิ่มเติมเกี่ยวกับปัญหาที่ฉันกำลังเผชิญ

ฉันมีอนิเมชั่นที่วาดได้เป็นจำนวนมาก ฉันเลือกวิธีนี้เพราะมันเร็วที่สุดและได้ผลลัพธ์ตามที่ฉันต้องการ โดยพื้นฐานทุกสิ่งปลูกสร้างเป็นภาพเคลื่อนไหวที่วาดได้ซึ่งไฟล์ xml ของมันหมายถึง 8 ภาพวาด (8 ภาพ = 8 ไฟล์) พวกเขาทั้งหมดเป็น PNG เนื่องจากความโปร่งใส เนื่องจากฉันมีภาพมากกว่า 200 ภาพขนาด apk คือ 120 MB (และฉันยังไม่ได้ทำการคัดลอกไฟล์ครึ่งหนึ่ง) นั่นคือสิ่งที่พรอมต์จะต้องมีวิธีการแก้ปัญหา กรุณาช่วยพัฒนาเพื่อน


บีบอัดภาพหรือแยกเนื้อหาเกมจาก apk อาจเป็นสิ่งที่คุณกำลังมองหา
JánosTuránszki

คุณหมายถึงไฟล์สำหรับขยาย? ปัญหาที่ไฟล์ส่วนขยายไม่มีโฟลเดอร์ที่มีความหนาแน่นต่างกัน นี่คือสิ่งที่เกมทำ ฉันกำลังทำแอนิเมชั่นแบบเฟรมต่อเฟรม หรือฉันอยู่ในเส้นทางที่ผิดทั้งหมด
Snake

ในกรณีที่ฉันพยายามช่วยและใส่คำตอบที่เกี่ยวข้องกับการประหยัดพื้นที่สำหรับภาพของคุณ อย่างไรก็ตามคำถามของคุณทำให้เกิดความสับสน: ยังไม่ชัดเจนว่าคุณต้องการรู้เทคนิคเช่นเกี่ยวข้องกับ "เกมเช่น CoC และ Age of Empires อย่างไรให้ขนาด apk ของพวกเขาต่ำกว่า 50 Mg?" หรือถ้าคุณต้องการเพียงแค่ตรวจสอบว่ามีวิธีหิวเคลื่อนไหวพื้นที่ดิสก์น้อย (เช่นชื่อของคุณแนะนำ) โปรดอธิบายให้ชัดเจนเพื่อที่ฉันจะสามารถลบคำตอบได้หากเป็นกรณีนี้และเพื่อให้คุณสามารถได้รับคำตอบที่แม่นยำยิ่งขึ้น
58

@ ฉันและฉันจะแก้ไขคำตอบของฉันเพื่อไตร่ตรองปัญหานี้ต่อไป
งู

2
สำหรับ Age of Empires อาจเป็นการรวมกันของความละเอียดต่ำ (IIRC มันถูกออกแบบมาสำหรับ 640x480) และภาพที่จัดทำดัชนี (ไม่ใช่ RGB แบบเต็ม)
user253751

คำตอบ:


24

คำถามของคุณยังไม่ชัดเจนหากคุณต้องการทราบเทคนิคที่ช่วยให้เกมประหยัดพื้นที่ดิสก์แม้ว่าจะมีไฟล์ภาพ / ทรัพยากรจำนวนมาก (นั่นคือสิ่งที่อยู่ในเนื้อหาของคำถาม) หรือถ้าคุณแค่อยากรู้ว่า มีวิธีที่หิวโหยในการสร้างแอนิเมชันสำหรับอาคารของคุณ (นั่นคือสิ่งที่เกี่ยวข้องกับชื่อคำถามของคุณ)

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


ที่กล่าวว่าในสถานการณ์ที่คล้ายกันสองโซลูชั่นฉันได้เห็น (และใช้ครั้งเดียว) ในแง่ของการประหยัดพื้นที่ในดิสก์คือ:

1) เชื่อมต่อภาพแต่ละภาพภายในภาพเดียวกัน บางครั้งสามารถช่วยได้ ดังนั้นแทนที่จะบันทึก 4 ไฟล์แยกกันสำหรับแต่ละสี่เหลี่ยมสีต่อไปนี้ฉันบันทึกไฟล์ทั้งหมดแบบเคียงข้างกันภายในภาพเดียวกัน (และจะแยกพวกเขาผ่านรหัสเกม):

ป้อนคำอธิบายรูปภาพที่นี่

ในตัวอย่างนี้การบันทึกแต่ละไฟล์ PNG ที่แตกต่างกัน 4 ไฟล์มีจำนวน 1255 ไบต์ในขณะที่ไฟล์เดียวที่มีการต่อกันทั้งหมดคือ 451 ไบต์ แน่นอนว่ามันสามารถช่วยได้มากน้อยแค่ไหนขึ้นอยู่กับแต่ละกรณีและคุณควรทดสอบเพื่อดูว่าสามารถช่วยคุณได้หรือไม่ขึ้นอยู่กับภาพของคุณ

2) การบีบอัดโฟลเดอร์ทรัพยากร ซึ่งมักจะมีประโยชน์มากในการประหยัดพื้นที่ดิสก์ จากนั้นเมื่อเกมกำลังทำงานคุณจะแตกหรือดึงภาพที่ต้องการจากไฟล์บีบอัด - ขึ้นอยู่กับรูปแบบการบีบอัดที่คุณใช้ ดูคำตอบที่ผ่านมาซึ่งกลายเป็นวิกิของไซต์นี้: /gamedev//a/37649/72423

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

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการบีบอัด: รัฐแห่งศิลปะในการบีบอัดภาพ?


สุดท้ายคุณอาจสนใจคิดว่าจะใช้รูปภาพประเภทใดในแต่ละสถานการณ์: รูปแบบรูปภาพใดที่มีประสิทธิภาพการใช้หน่วยความจำมากขึ้น: PNG, JPEG หรือ GIF


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

@Sake ดังนั้นตามการแก้ไขที่คุณทำฉันคิดว่าคำตอบของฉันจะมีประโยชน์จริงๆ การต่อภาพ + การบีบอัดอาจทำให้ขนาดโฟลเดอร์ของคุณลดลงอย่างมาก ใช้เทคนิคทั้งสองอย่างสม่ำเสมอในเกมบางประเภท เกี่ยวกับการต่อเรียงนั้นเป็นเคล็ดลับที่น่าประหลาดใจเสมอ ลองด้วยตัวคุณเอง: ใส่ภาพจากลำดับภาพเคลื่อนไหวหนึ่งภาพของคุณแบบคู่ขนานและเปรียบเทียบขนาดสุดท้ายกับผลรวมของภาพแต่ละภาพ จากนั้นคุณสามารถดูว่าช่วยในกรณีของคุณ สำหรับการบีบอัดสำหรับ PNG นั้นมีแนวโน้มที่จะมีประสิทธิภาพน้อยลง แต่ก็ยังคุ้มค่ากับความพยายามในการลดขนาดของโฟลเดอร์สุดท้ายของคุณ
MAnd

@ ลองสังเกตดูสักครั้ง: การต่อข้อมูลบางครั้งไม่คุ้มค่าหรือเพิ่มขนาดสุดท้ายเล็กน้อย แต่บ่อยครั้งมันสามารถส่งมอบการลดลงที่พึงประสงค์ ทุกอย่างขึ้นอยู่กับภาพของคุณ
58

ฉันจำได้ว่าลองทั้งเทคนิคและการลดลงน้อยกว่า 10% ฉันรู้ว่าการบีบอัดไม่สำคัญกับ PNG แต่ฉันจะลองเชื่อมต่อกัน นั่นเป็นเหตุผลที่ฉันถามว่าเกมอื่น ๆ ทำได้อย่างไรเพราะเห็นได้ชัดว่าพวกเขามีกราฟิกมากกว่าทางของฉัน
Snake

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

9

ฉันจะเสนอให้คุณลองTexturePacker

  • คุณสามารถลากและวางภาพทั้งหมดของคุณแล้วนำไปอัดแน่น
  • คุณสามารถใช้การบีบอัดที่แตกต่างกัน - เช่นใช้ PNG ที่จัดทำดัชนีซึ่งใช้หน่วยความจำน้อยลง - น้อยกว่า 70% เมื่อเทียบกับไฟล์ PNG มาตรฐาน
  • คุณสามารถสร้างไฟล์ข้อมูลไฟล์ที่มีชื่อ + ตำแหน่งของสิ่งปลูกสร้างแต่ละแห่งของคุณ
  • รุ่นฟรีอาจพอเพียงที่จะสร้างแผ่นสไปรต์สำหรับคุณแล้ว

คุณใช้กรอบการพัฒนาเกมเช่น AndEngine, Cocos2d-x หรือ LibGdx หรือไม่? => ไม่มี

คุณต้องการโหลดภาพทั้งหมดของคุณในเวลาเดียวกันหรือไม่? ดูเหมือนคุณจะพบปัญหา RAM ขนาดใหญ่บนอุปกรณ์เป้าหมาย


อัปเดต: งูส่งรูปมาให้ฉัน ตามที่สัญญาไว้จะไม่ทำให้พวกเขาเป็นสาธารณะที่นี่ดังนั้นฉันจึงสร้างงานศิลปะขึ้นมาเองเพื่อสาธิตวิธีลดการใช้หน่วยความจำ

ในภาพต้นฉบับมีเพียงส่วนหนึ่งของภาพที่เคลื่อนไหว ฉันวางนกไว้บนบ้านเพื่อสาธิตสิ่งนี้:

ป้อนคำอธิบายรูปภาพที่นี่

โดยทั่วไปแล้วการบรรจุแอนิเมชั่นที่สมบูรณ์ลงในแผ่นงานเป็นการสูญเสียความทรงจำครั้งใหญ่ คุณควรแยกชิ้นส่วนแบบคงที่และเคลื่อนไหว:

คงที่:

ป้อนคำอธิบายรูปภาพที่นี่

Anim01:

ป้อนคำอธิบายรูปภาพที่นี่

Anim02:

ป้อนคำอธิบายรูปภาพที่นี่

เก็บตำแหน่งเดิมของนกในภาพ นี่คือเหตุผลที่มีช่องว่างว่างเปล่าด้านบน คุณต้องการสิ่งนี้เพื่อจัดแนวแอนิเมชัน

ตอนนี้ลากภาพบนTexturePackerและเลือกพารามิเตอร์ต่อไปนี้

  • รูปแบบข้อมูล: แฮช JSON (หรือ XML หากคุณต้องการ)
  • TrimMode: Trim (นี่จะสร้างรูปสี่เหลี่ยม)
  • รูปแบบพิกเซล: INDEXED 8 บิต - เพื่อสร้าง PNG 8 บิต (หน่วยความจำน้อยลงประมาณ 70%)
  • อนุญาตการหมุน: false
  • ป้อนชื่อไฟล์สำหรับข้อมูล

TexturePacker บรรจุภาพ

ผลลัพธ์ก็คือตอนนี้คุณจะได้รับ 2 ไฟล์: The sprite sheet และไฟล์คำอธิบาย JSON

"house_anim_01.png":
{
    "frame": {"x":351,"y":246,"w":110,"h":79},
    "rotated": false,
    "trimmed": true,
    "spriteSourceSize": {"x":67,"y":8,"w":110,"h":79},
    "sourceSize": {"w":400,"h":400},
    "pivot": {"x":0.5,"y":0.5}
},

ส่วนที่สำคัญมีความกรอบและspriteSourceSize

กรอบช่วยให้คุณมีสถานที่ตั้งของเทพดาเดิมในแผ่นผีสาง

spriteSourceSizeให้ออฟเซ็ตสำหรับการวาดภาพ - ส่วนต่าง ๆ ของภาพที่เหลือเพราะการตัดแต่ง:

รูทีนการวาดโค้ดหลอกแบบง่ายจะมีลักษณะดังนี้:

drawImage(spritename, posX, posX)
{
    data    = sheetData[spritename]
    offsetX = data.spriteSourceSize.x
    offsetY = data.spriteSourceSize.y
    frameX  = data.frame.x
    frameY  = data.frame.y
    width   = data.frame.w
    height  = data.frame.h
    screen.draw(sheetImage, posX+offsetX, posY+offsetY, width, height)
}

คุณอาจต้องปรับการคำนวณออฟเซ็ตขึ้นอยู่กับจุดหมุน / จุดกำเนิดในระบบกราฟิกของคุณ รูทีนด้านบนถือว่าระบบพิกัดที่ต้นกำเนิดอยู่ด้านบนซ้าย

จากนั้นก็วาดบ้านใน 2 ผ่าน:

draw("background", 100, 100);
draw("anim_01", 100, 100);

คุณไม่ต้องกังวลเกี่ยวกับการชดเชย - เนื่องจากภาพที่ได้รับการจัดตำแหน่งแล้ว


+1 สำหรับการสังเกตเกี่ยวกับการใช้ RAM ซึ่งคนอื่นไม่สนใจ
Dan Hulme

@ Andreas ฉันจะตรวจสอบว่า ขอขอบคุณ. อย่าหัวเราะเยาะฉัน แต่ฉันไม่ได้ใช้เครื่องยนต์ ส่วนใหญ่แล้วจะทำด้วยอนิเมชั่นและ drawable และมันก็ทำงานได้อย่างมีเสน่ห์ ฉันไม่โหลดภาพทั้งหมดในหน่วยความจำ แต่อย่างใดมันจะผิดพลาด มันแค่โหลดภาพที่จำเป็นสำหรับการแสดงผลในขณะนี้ .. คุณคิดว่าคำแนะนำข้างต้นจะใช้งานได้กับ Android SDK มาตรฐานหรือไม่
งู

1
ใช่! ฉันจะ. TexturePacker มี 2 โหมดสำหรับตัดสไปรต์: รูปสี่เหลี่ยมและรูปหลายเหลี่ยม หากคุณใช้ภาพที่มีมิติเท่ากันคุณอาจได้รับประโยชน์อย่างมากจากตาข่ายรูปหลายเหลี่ยมในแง่ของการบรรจุ คำถามคือถ้าคุณจะสามารถวาดรูปสามเหลี่ยมพื้นผิว - หรือรูปสี่เหลี่ยมผืนผ้าด้วยหน้ากาก หากไม่ใช่กรณีนี้คุณยังสามารถใช้รูปสี่เหลี่ยมผืนผ้าได้ คุณสามารถส่งรูปภาพของคุณมาให้ฉันได้ถ้าคุณต้องการใช้ดรอปบ็อกซ์และส่งลิงค์ไปที่ -> support ที่ codeandweb ดอทคอม ฉันจะไม่แบ่งปันพวกเขา - เพียงสนใจที่จะดูว่าเราสามารถทำอะไรได้บ้างเพื่อปรับปรุงการบรรจุ
Andreas Löw

@ AndreasLöwฉันขอโทษฉันไม่ได้รับการแจ้งเตือนความคิดเห็นของคุณ ฉันเพิ่งเห็นมัน ฉันจะขอบคุณมากสำหรับความช่วยเหลือ ฉันจะส่งบางอย่างให้คุณและบางทีคุณสามารถทำให้กระจ่างในสิ่งที่ฉันควร .. คินดาติดอยู่กับบางสิ่งที่ฉันมีประสบการณ์น้อยและบางทีคุณอาจจะหลั่งน้ำตาได้ ผมจะติดต่อคุณเร็ว ๆ นี้
งู

7

นี่คือตัวชี้บางอย่างที่คุณสามารถใช้ได้

  1. พยายามทำให้แน่ใจว่าพื้นหลังและรูปภาพที่ไม่โปร่งใสทั้งหมดของคุณไม่ได้อยู่ในรูปแบบ PNG
  2. พยายามทำให้ทุกอนิเมชั่นวนได้เช่นถ้าภาพเคลื่อนไหวเป็น 1,2,3,4,5,6 ลองทำให้เป็นแบบ 1,2,3,4,3,2,1 โดยที่ตัวเลขเหล่านี้เป็นจำนวนภาพเคลื่อนไหว มันช่วยได้มาก
  3. หากภาพจำนวนมากเหมือนกันและมีเพียงสีที่แตกต่างกัน (โดยทั่วไปคือปุ่ม UI, ภาพเคลื่อนไหวอนุภาค, เหรียญเกม) จากนั้นลองถ่ายภาพสีขาวหนึ่งภาพและเปลี่ยนสีแบบไดนามิก
  4. พยายามทำให้. apk ของคุณมีเฉพาะภาพที่มีความสำคัญอย่างยิ่งจากนั้นโหลดทุกอย่างจากเซิร์ฟเวอร์และเก็บไว้ในหน่วยความจำโทรศัพท์

ฉันหวังว่าตัวชี้เหล่านี้จะช่วยได้

ป.ล.ฉันเป็นเพียงผู้ให้ความคิดทั่วไปเนื่องจากฉันไม่ได้ตระหนักถึงเนื้อหาเกมที่แน่นอนของคุณและขออภัยหากตัวชี้เหล่านี้ไม่มีประโยชน์


นอกจากนี้คุณยังสามารถ: 1) บีบอัดรูปภาพทั้งหมดของคุณ 2) ใช้ไทล์บ่อยที่สุดเท่าที่จะเป็นไปได้ 3) ภาพ concatinate เพื่อให้เป็นภาพขนาดใหญ่และใช้เป็นแผนที่ยูวีสำหรับพื้นผิว
Anthony Raimondo

นั่นคือคำแนะนำที่ดี ขอขอบคุณ. ฉันคิดว่าจุดที่สำคัญที่สุดคือ 4 อย่างไรก็ตามถ้าเป็นอย่างนั้นฉันจะวางมันไว้ในโฟลเดอร์ที่สามารถถอดได้ต่าง ๆ ได้อย่างไรและอ้างอิงมันเช่น R.drawable.image1 นั่นคือสิ่งที่ฉันสับสน
Snake

4

เกมจำนวนมากไม่เก็บเนื้อหากราฟิกไว้ใน. apk พวกเขารวมเฉพาะ "พื้นฐาน" เช่นกราฟิก UI และรหัสเกมและดาวน์โหลดเนื้อหาที่เหลือเมื่อติดตั้งเกมแล้ว นี่เป็นความจริงโดยเฉพาะอย่างยิ่งสำหรับเกมที่ใช้ทรัพยากรกราฟิกที่แตกต่างกันขึ้นอยู่กับความละเอียดของหน้าจอของคุณเพื่อป้องกันไม่ให้. apk ไม่ต้องมีทั้งความละเอียดต่ำและสินทรัพย์ความละเอียดสูง

คุณควรพิจารณาทั้งตัวเลือกการปรับให้เหมาะสมของผู้ให้คำตอบอื่น ๆ รวมถึงในที่สุดคุณจะต้องแสดงกราฟิกของเกมแยกจาก. apk เองหรือไม่


ฉันไม่มีปัญหาในการรับกราฟิกจากเซิร์ฟเวอร์ (หรือแม้กระทั่งไฟล์ขยาย) แต่ฉันจะวางมันไว้ในโฟลเดอร์ drawable ได้อย่างไรเพื่อให้ฉันสามารถอ้างอิงพวกเขาได้โดย R.drawable.x เนื่องจาก xml ของฉัน (หลายคน) ส่วนใหญ่อ้างอิงพวกเขาโดยใช้ R .drawable
Snake

AFAIK คุณทำไม่ได้ วิธีแก้ปัญหาหนึ่งคือการเก็บตารางแฮชของชื่อไฟล์ทรัพยากรที่เชื่อมโยงกับ ID ทรัพยากรและใช้ AssetManager เพื่อดึงไฟล์ตาม ID เหล่านั้น แต่คุณอาจต้องทำงานซ้ำไฟล์. xml ของคุณหากคุณไปที่เส้นทางนี้
Sandalfoot

4

ฉันมาที่ไซต์นี้เพื่อค้นหาคำถามที่คล้ายกันและมีแหล่งข้อมูลที่ดีสองสามข้อที่ตอบทั้งคำถามของคุณและคำถามอื่น ๆ

คุณน่าจะลองดูภาพเคลื่อนไหว 2D: โมเดลเคลื่อนไหว 3 มิติหรือสไปรต์พร้อมเฟรมภาพเคลื่อนไหว? สำหรับการถกเถียงเรื่องแอนิเมชันประเภทต่าง ๆ มันช่วยให้ฉันเพิ่มประสิทธิภาพเกมของฉัน นอกจากนี้คุณไม่ต้องบอกเราว่าคุณใช้ API ใดหรือเอ็นจิ้นใดที่คุณใช้ เพียงอย่างเดียวนั้นสามารถสร้างความแตกต่างได้ค่อนข้างมาก: เฟรม Android ตามภาพเคลื่อนไหว PNG

นอกจากนี้โปรดทราบว่าหากคุณจะไปเส้นทางการบีบอัดอาจมีความแตกต่างที่สำคัญระหว่างวิธีการบีบอัด โดยเฉพาะมีความแตกต่างค่อนข้างน้อยระหว่างประเภทการบีบอัดและมีการถกเถียงกันเป็นพิเศษเกี่ยวกับเส้นทางที่เหมาะสมที่สุดสำหรับอุปกรณ์มือถือ โดยเฉพาะถ้าคุณคำนึงถึงมือถือการใช้ RAM และการสูญเสีย CPU สำหรับการโหลดเป็นสิ่งที่สำคัญยิ่ง ดู: http://www.gamasutra.com/blogs/AlexandruVoica/20130419/190833/Why_efficiency_is_key_in_texture_compression_standards_for_mobile_graphics.php?print=1


ขอบคุณ Bennton จริง ๆ แล้วฉันเป็นคนใหม่ในการพัฒนาเกม ฉันพัฒนาแอพจำนวนมากที่เป็นเครื่องมือ / เพิ่มประสิทธิภาพ แต่ไม่มีเกม ดังนั้นฉันกำลังทำเกมแรกของฉันและฉันไม่ได้ใช้เครื่องยนต์ ฉันใช้แค่ AnimationDrawables และสิ่งต่าง ๆ ก็ใช้ได้ดี มันเป็นแค่ขนาดของ apk ที่กำลังจะออกไป
งู

Bennton ลิงค์สุดท้ายที่คุณแนะนำน่าสนใจเป็นพิเศษ ขอบคุณมากสำหรับการแบ่งปัน! ตรวจสอบให้แน่ใจว่าคุณได้ดูคำตอบสุดท้ายจากคำตอบของฉันซึ่งสัมผัสกับปัญหาการบีบอัดที่แตกต่างกันสำหรับไฟล์ประเภทต่างๆ ที่จริงแล้วดูเหมือนว่าจะมีประเภทการบีบอัดที่ทำงานได้ดีขึ้นกับประเภทภาพที่บีบอัดแล้วเช่น PNG หรือดีกว่ากับประเภทภาพที่ไม่บีบอัด การทดลองแต่ละกรณีเป็นวิธีที่ดีที่สุดในการตรวจสอบว่าอะไรดีที่สุดสำหรับแต่ละสถานการณ์
mand
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.