ฉันสามารถลดขนาดไฟล์ของ SVG ให้ใกล้เคียงกับ JPEG ที่เทียบเท่าได้หรือไม่


37

ฉันมีภาพที่ฉันใช้ในเว็บไซต์ ฉันต้องการใช้ SVG เพื่อให้สามารถมีขนาดใดก็ได้และยังดูกรอบ

  • ดรอปบ็อกซ์นี้มีไฟล์ SVG เช่นเดียวกับไฟล์ Illustrator ดั้งเดิม
  • นี่คือการส่งออก JPEG:

    การส่งออก JPEG

SVG มีขนาดไฟล์ใหญ่กว่า JPG มาก เป็นไปได้หรือไม่ที่จะปรับ SVG ให้เหมาะสมเพื่อให้มีขนาดไฟล์ใกล้เคียงกัน? ฉันอาจสูญเสียคุณภาพบางอย่างถ้านั่นจะช่วย ฉันได้ลองใช้เครื่องมือเพิ่มประสิทธิภาพ SVG นี้แล้ว แต่ก็ไม่ได้สร้างความแตกต่างมากนัก

หากฉันบันทึกไฟล์ Illustrator เป็น JPG ให้ติดตามผลลัพธ์และบันทึกเป็น SVG จากนั้นฉันจะได้รับขนาดไฟล์ที่เล็กกว่า แต่มีการสูญเสียคุณภาพ นี่ทำให้ฉันคิดว่าบางทีเลเยอร์ในแบบดั้งเดิมอาจทำให้เกิดขนาดใหญ่? ภาพที่ฉันทำงานด้วยซับซ้อนเกินกว่าจะเหมาะสมกับ SVG หรือไม่


16
ไม่เกี่ยวข้องกับคำถามของคุณ แต่คุณไม่ควรใช้ JPG สำหรับภาพเช่นนี้ ให้ใช้ PNG แทน: ขนาดจะใกล้เคียงกันและคุณจะไม่สูญเสียคุณภาพใด ๆ
svick

จงตระหนักว่าการเปรียบเทียบจะขึ้นอยู่กับขนาดทางกายภาพของภาพ การปรับขนาด JPEG เพิ่มขนาดให้ใหญ่ขึ้น การปรับขนาด SVG ไม่มีผลกระทบ เป็นไปได้ว่าไอคอนขนาดเล็กมากจะเล็กกว่าเป็น JPEG แม้ว่าฉันจะไม่เรียกกราฟิกของคุณเล็กมาก
พอลเดรเปอร์

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

1
เพียงเพื่อเพิ่มความคิดเห็น svick: ภาพ "เช่นนี้" ที่ PNG ดีกว่าคืออะไรที่มีขอบโปร่งใสหรืออะไรก็ตามที่มีพื้นที่ที่มั่นคงของสีหรือสีขาว หากเป็น 'กราฟิก' (เช่นโลโก้ไอคอน ฯลฯ ) ไม่ใช่ 'ภาพถ่าย' PNG มักจะดีกว่า JPG ดีกว่าสำหรับภาพถ่าย (หรือภาพสมจริง)
user56reinstatemonica8

คำตอบ:


40

SVG ของคุณมีกราฟิกพิกเซลแบบฝังสำหรับเฉดสีที่ด้านล่างขวาของตัวควบคุม นี่เป็นหน้าที่ของขนาดไฟล์ประมาณ⅔ หากคุณลบไฟล์ออกไฟล์ SVG ของคุณอยู่ในระดับเดียวกับ JPEG ของคุณ คุณอาจได้เอฟเฟกต์ที่คล้ายกันอย่างเพียงพอกับการไล่ระดับ

เทคนิคอื่น ๆ ของการลดขนาดไฟล์ SVG รวมถึง:

  • ลบข้อมูลเมตาทั้งหมดและที่คล้ายกัน Inkscape มีบันทึกเป็น SVG ธรรมดาสำหรับสิ่งนี้ ฉันคิดว่าโปรแกรมอื่นมีบางอย่างที่คล้ายกัน
  • ลบโหนดที่เพิ่มรูปร่างให้เล็ก ๆ น้อย ๆ เช่นมีโหนดปลอมบนรูปร่างของตัวควบคุมของคุณ

นี่ทำให้ฉันคิดว่าบางทีเลเยอร์ในแบบดั้งเดิมอาจทำให้เกิดขนาดใหญ่?

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

ภาพที่ฉันทำงานด้วยซับซ้อนเกินกว่าจะเหมาะสมกับ SVG หรือไม่

หากคุณสามารถสร้างภาพจากศูนย์ได้อย่างมีเหตุผล¹ไม่ควรซับซ้อนเกินไปสำหรับรูปแบบ SVG ไม่มีสิ่งใดเป็นขีดจำกัดความซับซ้อนที่น่าอัศจรรย์เกินกว่าขนาดไฟล์ที่จะระเบิด (อาจเป็นเพราะรูปแบบที่สมเหตุสมผลใด ๆ ) แน่นอนถ้าคุณเลือกความละเอียดที่เพียงพออย่างพอเพียงคุณสามารถส่งออก SVG ทุกไฟล์เป็น JPEG ที่มีขนาดไฟล์เล็กกว่าได้ แต่นั่นไม่ได้หมายความว่าคุณไม่ควรใช้ SVG


¹โดยเฉพาะอย่างยิ่งไม่มีการติดตามและที่คล้ายกัน ในการยกตัวอย่างสุดขั้ว: หากคุณต้องการสร้างทุกพิกเซลของภาพถ่ายด้วย SVG ดั้งเดิม (เช่นโดยไม่ต้องฝังกราฟิกพิกเซลใน SVG) คุณอาจคิดว่าผลลัพธ์นั้นซับซ้อนเกินไปสำหรับการแสดงในรูปแบบ SVG ได้อย่างมีประสิทธิภาพ . แต่นั่นเป็นความรู้สึกร่วมกันที่หวังว่า


80

ดังที่ Wrzlprmft ได้ชี้ให้เห็นแล้วขนาดของไฟล์ SVG ของคุณมากกว่า 50% ถูกใช้โดยอิมเมจ PNG บิตแมปในตัวที่ใช้ในการสร้างเอฟเฟ็กต์การแรเงาที่ละเอียดอ่อนบนคอนโทรลเลอร์ เพียงแค่กำจัดภาพนั้นและแทนที่ด้วยการไล่ระดับสีแบบง่ายก็เพียงพอที่จะทำให้ SVG ลดขนาดลงเหลือประมาณ 10kb

        เป็นต้นฉบับ         ด้วยการไล่ระดับสีแบบง่าย
ภาพต้นฉบับพร้อมแรเงาบิตแมปแฟนซีด้านซ้ายเวอร์ชันที่แก้ไขพร้อมการไล่ระดับสีเรเดียนที่ง่ายด้านขวา

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

นั่นคือการประหยัดที่ง่าย 50% ที่นั่น แต่เรายังไม่หยุด ถ้าคุณรู้ว่าแม้แต่นิด ๆ หน่อยเกี่ยวกับรูปแบบ SVG , คุณสามารถทำมากดีกว่าว่า

ก่อนอื่นให้รัน "Vacuum Defs" ใน Inkscape เพื่อกำจัดคำจำกัดความที่ไร้ประโยชน์แล้วบันทึกภาพเป็น "SVG ธรรมดา" ตอนนี้ได้เวลาเปิดขึ้นในโปรแกรมแก้ไขข้อความแล้วดูว่าเราสามารถกำจัดอะไรได้บ้าง ตามหลักการแล้วคุณควรใช้โปรแกรมแก้ไขร่วมกับการแสดงตัวอย่าง SVG แบบบูรณาการเพื่อให้คุณสามารถเห็นผลอย่างรวดเร็ว (หวังว่าจะไม่มี) การแก้ไขของคุณที่มีต่อภาพลักษณ์ ฉันใช้emacsสำหรับสิ่งนั้น แต่มีบรรณาธิการอื่น ๆ ที่มีคุณสมบัติคล้ายกันอยู่ที่นั่น

อย่างไรก็ตามเมื่อเปิดไฟล์ SVG ในเท็กซ์เอดิเตอร์ของคุณแล้วให้เริ่มทำมันให้ง่ายขึ้น!

  • ที่ด้านบนสุดมีประโยชน์<!-- comment -->มากมาย เพียงแค่ลบมัน

  • หากคุณกำลังแก้ไข SVG โดยตรงจาก Illustrator แสดงว่าไม่มีประโยชน์<!DOCTYPE ... >เช่นกัน ลบด้วย

  • Inkscape ยืนยันในการติดบล็อกข้อมูลเมตา RDF ที่ไร้ประโยชน์ลงในภาพของคุณ เพียงแค่ค้นหาแท็กและลบมันพร้อมกับทุกอย่างและรวมถึงการปิด<metadata ...></metadata>

  • นอกจากนี้แม้ว่าคุณจะบันทึกไฟล์เป็น "SVG ธรรมดา" Inkscape ก็ยังคงสว่างด้วยคุณสมบัติที่กำหนดเองมากมาย ค้นหาทุกแอตทริบิวต์ที่ขึ้นต้นด้วยinkscape:หรือsodipodi:และลบออก

  • เมื่อเมทาดาทาและแอตทริบิวต์เฉพาะของ Inkscape หายไปคุณสามารถลบแอตทริบิวต์เนมสเปซ XML ที่ไม่ได้ใช้ทั้งหมดออกจาก<svg>แท็ก มันควรจะปลอดภัยในการลบอย่างน้อยxmlns:rdf, xmlns:dc, xmlns:cc, และxmlns:inkscape xmlns:sodipodiหากมีxmlns:svgคุณสมบัติซ้ำซ้อนให้ลบออกด้วยเช่นกัน แอตทริบิวต์ namespace เดียวที่คุณควรจะทิ้งไว้ ณ จุดนี้คือ:

    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    
  • <svg>แท็กนอกจากนี้ยังมีพวงของคุณลักษณะที่ไร้ประโยชน์อื่น ๆ ที่คุณได้อย่างปลอดภัยสามารถลบเช่นและenable-background xml:space="preserve"(ผู้ถูกแทรกโดยผู้ส่งออก Illustrator SVG และ Inkscape ไม่เพียงพอที่สมาร์ทที่จะตระหนักถึงพวกเขาจะไร้ประโยชน์.) The viewBoxแอตทริบิวต์ยังสามารถถอดออกได้อย่างปลอดภัยจากภาพนี้เนื่องจากมันก็ซ้ำค่าของx, y, widthและheightคุณลักษณะ

  • นอกจากนี้คุณยังสามารถลบencodingและstandaloneแอตทริบิวต์ออกจาก<?xml ... ?>แท็กได้อย่างปลอดภัย

  • ทีนี้มาถึงความกล้าของข้อมูลภาพ ด้วยเหตุผลบางอย่าง Inkscape ยืนยันในการกำหนดidคุณสมบัติให้กับทุกองค์ประกอบแม้ว่าพวกเขาจะไม่เคยอ้างอิง idคุณลักษณะใด ๆที่มีค่าจะไม่ซ้ำกันที่อื่นในไฟล์ (ค้นหามัน!) ปลอดภัยที่จะลบ โดยทั่วไปรหัสเดียวที่คุณต้องเก็บไว้คือรหัสสำหรับการไล่ระดับสีและอาจเป็นวัตถุอื่น ๆ (เช่นเส้นทาง) ที่พบภายใน<defs>ส่วน

  • นอกจากนี้ Inkscape linearGradient4277ชอบที่จะสร้างรหัสยาวเช่น ลองย่อรหัสใด ๆ ที่คุณไม่สามารถลบออกในรูปแบบย่อlg1แทนได้

  • นอกจากนี้ยังมีหลาย<defs>ส่วนทันทีหลังจากที่อื่น การรวมพวกมันช่วยประหยัดสองสามไบต์ (และทำให้โครงสร้างเอกสารง่ายขึ้นโดยทั่วไป)

  • นอกจากนี้ยังมีกลุ่มที่ว่างเปล่าหลาย<g>องค์ประกอบ( องค์ประกอบ) ในตอนท้ายของไฟล์ เพียงกำจัดพวกเขา อาจมีกลุ่มติดต่อกันหลายกลุ่มที่มีtransformแอตทริบิวต์เดียวกันแน่นอน(หรือไม่มีเลย) นอกจากนี้ยังปลอดภัยที่จะรวมสิ่งเหล่านั้น

  • ด้วยเหตุผลแปลก ๆ บางอย่าง Inkscape จะบันทึกเส้นทาง Bezier ที่ซ้ำซ้อน ( dคุณลักษณะ) สำหรับ<circle>องค์ประกอบ ที่ใช้พื้นที่โดยไม่มีเหตุผลดังนั้นเพียงแค่ลบเหล่านั้น (ปล่อยให้dแอตทริบิวต์กับ<path>องค์ประกอบเป็น: สิ่งเหล่านั้นใช้จริงสำหรับบางสิ่ง)

  • Inkscape ยังชอบที่จะใช้ CSS ในstyleคุณลักษณะที่คุณลักษณะเฉพาะมากขึ้นจะสั้นกว่าเช่นการเขียนไปอย่างละเอียดมากขึ้นfill="#4888fa" style="fill:#4888fa"คุณสามารถบันทึกสองสามไบต์ได้โดยแบ่งสไตล์เหล่านั้นออกเป็นคุณลักษณะแต่ละตัว (และลบรูปแบบที่เพิ่งตั้งค่าเริ่มต้นซ้ำไปโดยเปล่าประโยชน์) แต่นั่นทำให้คุ้นเคยกับรูปแบบ SVG มากกว่าการเปลี่ยนแปลงส่วนใหญ่ข้างต้นเล็กน้อย

  • นอกจากนี้หากมี<use ... >องค์ประกอบใด ๆคุณอาจบันทึกไม่กี่ไบต์ด้วยการแทนที่องค์ประกอบเหล่านั้นด้วยองค์ประกอบจริงที่ลิงก์ไป (ของหลักสูตรนี้เพียงช่วยประหยัดพื้นที่ถ้าองค์ประกอบเชื่อมโยงที่มีการใช้เพียงครั้งเดียว.) นอกจากนี้ยังดูเหมือนว่า Inkscape ชอบที่จะกำหนดการไล่ระดับสีวงกลมโดยอ้อมแรกกำหนดหยุดใน<linearGradient>และจากนั้นอ้างอิงไว้ใน<radialGradient>; คุณสามารถทำให้มันง่ายขึ้นโดยการย้ายจุดหยุดโดยตรงภายในการไล่สีในแนวรัศมีและกำจัดการไล่ระดับสีเชิงเส้นที่ไม่ได้ใช้ในขณะนี้ ในฐานะโบนัสหากxlink:hrefคุณสามารถลบแอ็ตทริบิวต์ทั้งหมดได้โดยการทำเช่นนี้คุณสามารถลบแอxmlns:xlinkททริบิวออกจาก<svg>แท็กได้

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

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

อย่างไรก็ตามนี่คือสิ่งที่ฉันจัดการเพื่อแก้ไขภาพ SVG ของคุณด้วยมือลงใน:

<?xml version="1.0"?>
<svg
  xmlns="http://www.w3.org/2000/svg"
  version="1.1"
  x="0" y="0" width="124" height="52">
<g transform="translate(1,-27.5)">
  <linearGradient id="lg1"
    x1="70.1063" y1="13.4122"
    x2="66.1994" y2="-26.4368"
    gradientUnits="userSpaceOnUse"
    gradientTransform="matrix(0.9997,-0.0263,0.0263,0.9997,-7.4,61.3)">
    <stop offset="0" stop-color="#154BBF" />
    <stop offset="1" stop-color="#6E8BFF" />
  </linearGradient>
  <path d="M 119.198,75.836 C 115.115,80.541 7.902,78.843 3.585,74.366 -0.734,69.888 -1.322,46.938 2.76,42.233 6.842,37.53 113.821,30.047 118.137,34.524 c 4.319,4.477 5.143,36.609 1.061,41.312 z" id="path3298" fill="url(#lg1)" />
  <linearGradient id="lg2"
    x1="70.4391" y1="13.5887"
    x2="70.4391" y2="-25.3265"
    gradientUnits="userSpaceOnUse"
    gradientTransform="matrix(0.9997,-0.0263,0.0263,0.9997,-7.4,61.3)">
    <stop offset="0" stop-color="#4166FA" />
    <stop offset="1" stop-color="#87A4FF" />
  </linearGradient>
  <path d="M 119.2,71.843 C 115.247,76.118 11.615,74.749 7.447,70.692 3.281,66.635 2.747,45.804 6.7,41.528 c 3.953,-4.277 107.372,-11.239 111.539,-7.183 4.167,4.057 4.915,33.222 0.961,37.498 z" id="path3305" fill="url(#lg2)" />
  <path stroke="#fff" stroke-width="5" d="m 103.734,64.225 0,0 c -0.921,-0.271 -1.661,-0.724 -2.2,-1.342 -0.917,-1.051 -0.957,-2.455 -0.88,-3.576 -1.831,-0.373 -3.866,-0.886 -7.099,-1.84 -3.233,-0.954 -5.221,-1.627 -6.961,-2.308 -0.544,0.983 -1.34,2.14 -2.679,2.525 -0.789,0.227 -1.656,0.204 -2.577,-0.068 -1.415,-0.417 -2.876,-1.431 -3.723,-2.583 -1.731,-2.354 -1.283,-6.55 -0.601,-9.655 0.964,-4.399 3.692,-11.662 7.252,-13.641 3.374,-1.877 12.426,0.468 16.37,1.6315 3.944,1.1635 12.873,4.1185 14.692,7.5355 1.914,3.596 0.262,11.176 -1.317,15.393 -1.113,2.978 -3.016,6.746 -5.746,7.782 -1.338,0.505 -3.117,0.564 -4.531,0.146 z" />
  <path fill="#4888fa" d="m 103.734,64.225 0,0 c -0.921,-0.271 -1.661,-0.724 -2.2,-1.342 -0.917,-1.051 -0.957,-2.455 -0.88,-3.576 -1.831,-0.373 -3.866,-0.886 -7.099,-1.84 -3.233,-0.954 -5.221,-1.627 -6.961,-2.308 -0.544,0.983 -1.34,2.14 -2.679,2.525 -0.789,0.227 -1.656,0.204 -2.577,-0.068 -1.415,-0.417 -2.876,-1.431 -3.723,-2.583 -1.731,-2.354 -1.283,-6.55 -0.601,-9.655 0.964,-4.399 3.692,-11.662 7.252,-13.641 3.374,-1.877 12.426,0.468 16.37,1.6315 3.944,1.1635 12.873,4.1185 14.692,7.5355 1.914,3.596 0.262,11.176 -1.317,15.393 -1.113,2.978 -3.016,6.746 -5.746,7.782 -1.338,0.505 -3.117,0.564 -4.531,0.146 z" />
  <path fill="#87b5ff" d="m 114.774,40.292 c -1.17,-2.151 -7.571,-4.939 -14.293,-6.921 V 33.37 c -0.023,-0.007 -0.047,-0.014 -0.07,-0.021 -0.023,-0.007 -0.047,-0.015 -0.071,-0.02 l 0,0 c -6.723,-1.985 -13.612,-3.12 -15.761,-1.949 -4.296,2.337 -9.198,17.315 -6.265,21.228 0.907,1.209 3.014,2.449 4.466,2.043 1.452,-0.404 2.121,-3.4 2.652,-3.174 2.518,1.077 5.601,2.117 8.744,3 3.119,0.966 6.272,1.765 8.972,2.229 0.569,0.097 -0.498,2.975 0.502,4.104 1.001,1.128 3.443,1.232 4.861,0.709 4.586,-1.693 8.602,-16.933 6.263,-21.227 z" />
  <path fill="#2f67c9" d="m 90.818,42.604 c -0.097,-0.194 -0.901,-0.575 -1.999,-1.006 0.317,-1.135 0.497,-2.007 0.401,-2.2 -0.319,-0.641 -3.681,-1.766 -4.323,-1.447 -0.192,0.096 -0.574,0.9 -1.004,1.998 -1.135,-0.315 -2.006,-0.497 -2.201,-0.401 -0.64,0.319 -1.766,3.681 -1.446,4.322 0.096,0.193 0.901,0.575 1.997,1.006 -0.316,1.134 -0.496,2.007 -0.4,2.199 0.32,0.64 3.682,1.767 4.323,1.447 0.193,-0.095 0.575,-0.901 1.005,-1.997 1.135,0.314 2.008,0.496 2.199,0.401 0.642,-0.32 1.767,-3.682 1.448,-4.322 z" />
  <path fill="#4888fa" d="m 100.282,33.311 c -0.024,-0.007 -0.046,-0.013 -0.069,-0.02 -0.023,-0.006 -0.046,-0.013 -0.07,-0.02 l 0,0 c -2.455,-0.725 -4.932,-1.334 -7.181,-1.755 -0.765,2.073 -1.164,4.497 -0.789,5.91 0.627,2.363 9.764,5.059 11.574,3.414 1.096,-0.996 2.091,-3.297 2.566,-5.483 -1.876,-0.731 -3.937,-1.428 -6.031,-2.046 l 0,0 z" />
  <circle fill="#639bff" r="3.427" cy="46.947" cx="101.382" />
  <circle fill="#4888fa" r="2.868" cy="45.940" cx="109.28" />
  <circle fill="#2f67c9" r="2.868" cy="52.538" cx="106.287" />
  <radialGradient id="rg3"
    cx="90.874" cy="39.29"
    fx="90.874" fy="39.29"
    r="19.89"
    gradientUnits="userSpaceOnUse"
    gradientTransform="matrix(1.7028,-0.3387,0.276,1.3872,-70.22,16.58)">
    <stop stop-color="#1166a8" stop-opacity="0" offset="0" />
    <stop stop-color="#1166a8" stop-opacity="0.02" offset="0.45" />
    <stop stop-color="#1166a8" stop-opacity="0.63" offset="1" />
  </radialGradient>
  <path d="m 103.734,64.225 0,0 c -0.921,-0.271 -1.661,-0.724 -2.2,-1.342 -0.917,-1.051 -0.957,-2.455 -0.88,-3.576 -1.831,-0.373 -3.866,-0.886 -5.973,-1.508 -0.375,-0.11 -0.75,-0.223 -1.124,-0.338 -0.378,-0.107 -0.753,-0.216 -1.128,-0.326 -2.107,-0.622 -4.095,-1.295 -5.835,-1.976 -0.544,0.983 -1.34,2.14 -2.679,2.525 -0.789,0.227 -1.656,0.204 -2.577,-0.068 -1.415,-0.417 -2.876,-1.431 -3.723,-2.583 -1.731,-2.354 -1.283,-6.55 -0.601,-9.655 0.964,-4.399 3.692,-11.662 7.252,-13.641 3.374,-1.877 12.426,0.468 16.245,1.591 l 0.274,0.081 c 3.795,1.123 12.724,4.078 14.543,7.495 1.914,3.596 0.262,11.176 -1.317,15.393 -1.113,2.978 -3.016,6.746 -5.746,7.782 -1.338,0.505 -3.117,0.564 -4.531,0.146 z" fill="url(#rg3)" />
</g></svg>

ภาพ SVG นี้ดูทั้งหมด แต่แยกไม่ออกจากภาพตัวอย่างที่สองด้านบนและใช้เวลาเพียง 5189 ไบต์น้อยกว่าภาพ JPEG ของคุณมาก ฉันแน่ใจว่ามันสามารถเพิ่มประสิทธิภาพได้อีก แต่นี่เป็นเพียงตัวอย่างของสิ่งที่คุณสามารถทำได้ในไม่กี่นาทีด้วยการฝึกฝน (ผมใช้เวลามากอีกต่อไปที่จะพิมพ์ขึ้นคำตอบนี้กว่าที่จะแก้ไขโค้ดจริง SVG ได้.)

ในที่สุดการบีบอัดรหัส SVG นี้ด้วย gzip จะย่อขนาดลงเหลือเพียง 1846 ไบต์ (!) ซึ่งแทบจะไม่เกินหนึ่งในสี่ของขนาด JPEG ของคุณ


4
กอล์ฟอย่างดี
Wrzlprmft

7
กำจัดแบ่งบรรทัดและคุณต้องการบันทึก 50 ไบต์ :)
Yorik

15
ฉันต้องเข้าร่วมเว็บไซต์นี้เพื่อโหวตคำตอบที่ยอดเยี่ยมนี้! ทำได้ดี!
Karl-Johan Sjögren

เฮ้อิลมารีฉันสงสัยว่าคุณจะลองดูแอปพลิเคชันเว็บที่ฉันเชื่อมโยงกับคำตอบแล้วยืนยันว่าทำทุกอย่างด้วยมือของคุณหรือไม่? ฉันวิ่งบน SVG ขนาดใหญ่พร้อมการลดที่น่าทึ่ง แต่เมื่อฉันยังใช้งาน SVG นั้นผ่านบริการอื่นก่อนหน้านี้ฉันสามารถบันทึกเพิ่มอีก 2kb ได้ เมื่อฉันตรวจสอบรหัส SVG ฉันยังคงเห็นข้อมูลเมตาบางส่วนที่มีลิงก์ไปยัง Adobe และฉันไม่รู้ว่าจำเป็นหรือไม่ ภูมิปัญญา SVG ของคุณได้รับการชื่นชมอย่างมาก
Dom

30

ฉันรู้สึกประหลาดใจเล็กน้อยที่ไม่มีใครพูดถึงส่วนขยาย " Scour " มันมาพร้อมกับ Inkscape (ณ v0.47) และทำสิ่งที่ดีที่สุดที่ Ilmari Karonen พูดถึง


14
+1 มันยอดเยี่ยม! จริงๆแล้วฉันไม่รู้ด้วยซ้ำว่าเครื่องมือนี้มีอยู่จริง ด้วยตัวเลือกที่ถูกต้องรุ่นบรรทัดคำสั่งจะเต้นรหัสที่ได้รับการปรับปรุงด้วยมือของฉันเกือบ 200 ไบต์และการเรียกใช้บนรหัสที่ได้รับการปรับปรุงด้วยมือนั้นจะลดลงเหลือเพียง 4571 ไบต์ (!)
Ilmari Karonen

5

คุณสามารถแปลงเป็น SVG ที่บีบอัด (SVGZ) และวาง image.svgz บนหน้าเว็บของคุณ:

gzip image.svg
mv image.svg.gz image.svgz

หรือใน Adobe Illustrator เพียงบันทึกเป็น "SVG ที่ถูกบีบอัด" ซึ่งจะเขียนไฟล์ image.svgz

สำหรับภาพทดสอบของคุณยังคงมีขนาดใหญ่กว่า JPG แต่:

image.jpg:   7268 bytes
image.svg:  22385 bytes
image.svgz: 14614 bytes

6
SVG ที่ถูกบีบอัดไม่ทำงานในส่วนใหญ่หากไม่ใช่ทั้งหมด IE ที่ผ่านมาน่าเศร้า ความคิดนั้นมีประโยชน์ แต่ IE ก็มีประโยชน์น้อยกว่า +1 ต่อไปเพราะไม่ใช่ความผิดของคุณ IE $ ucks :)
Dom

5
@Dom ประสบการณ์กับ IE และ PNG แสดงให้เห็นว่า 3-5 ทศวรรษไม่ใช่ปี
Glenn Randers-Pehrson

3
การทุบตี IE จะไม่ทำให้ฉันสนุก! :) มันเจ๋งมากที่เราสามารถดึงดูดคนที่มีระดับประสบการณ์ของคุณมาที่ GDSE ฉันหวังว่าคุณจะชอบที่นี่และถ้าไม่มีใครบอกว่ายินดีต้อนรับ!
Dom

2
เพื่อทดสอบใน IE คุณสามารถใช้ VM ได้จากmodern.ie/en-us
Scott Carlson

4
หากคุณให้บริการบนเว็บไซต์สิ่งนี้จะให้ประโยชน์เล็กน้อยแก่ลูกค้าที่ขอใช้การบีบอัด HTTP (ซึ่งโดยทั่วไปจะใช้ gzip อยู่แล้ว)
Bob

3

ฉันเพิ่งพบเครื่องมือที่https://petercollingridge.appspot.com/svg-editor ( ซอร์สโค้ด ) ที่ช่วยเพิ่มประสิทธิภาพไฟล์ SVG มีผลลัพธ์ที่ดีในกรณีนี้ทำให้ขนาดไฟล์ลดลงเหลือ 3.7kB ซึ่งมีขนาดเพียงครึ่งหนึ่งของ JPG โดยมีการปรับด้วยตนเองเล็กน้อย:

การใช้เครื่องมือนี้เพื่อปรับไฟล์ SVG ให้เหมาะสมต้องใช้เวลาน้อยกว่าการเล่นไฟล์ด้วยตนเอง


ยินดีต้อนรับสู่การออกแบบกราฟิก SE โปรดทราบว่าผู้ถามกล่าวถึงเครื่องมือนี้อย่างมากในคำถาม ไม่ใช่ว่านี่จะทำให้คำตอบนี้เป็นโมฆะ แต่คุณสามารถนำไปใช้ในมุมมอง นอกจากนี้คุณหมายถึงอะไรโดยการปรับ
Wrzlprmft

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

เช่นเดียวกับ SVGOMG (จากคำตอบของ Dom) ที่นี่การประหยัดที่ยิ่งใหญ่ที่สุดดูเหมือนจะมาจากการปิดการใช้งาน xlink ซึ่งในฐานะที่เป็นผลข้างเคียงลบภาพที่ฝังอยู่อย่างสมบูรณ์ เห็นได้ชัดว่าการแทนที่ภาพด้วยการไล่ระดับสีไม่ใช่สิ่งที่คุณคาดหวังว่าจะเป็นเครื่องมืออัตโนมัติ
Ilmari Karonen

3

SVGOMG! เป็นสุดยอดเว็บแอพสำหรับการเพิ่มประสิทธิภาพ SVG

ตามที่ผู้สร้างแอป SVGOMG เป็นSVGOของ ' M issing G UI'

เรียกใช้บนรูปภาพที่มีให้นำลงมาเพียง3.42kbและ1.4kbหลังจากถูก gzipped

ภาพหน้าจอ SVGOMG


1
เมื่อดูตัวอย่างที่แสดงผลดูเหมือนว่าการประหยัดส่วนใหญ่มาจากความจริงที่ว่ามันเป็นการลบภาพที่ฝังอยู่อย่างสมบูรณ์ เห็นได้ชัดว่าการแทนที่บิตแมปด้วยการไล่ระดับสีไม่ใช่สิ่งที่ใคร ๆ สามารถคาดหวังได้ว่าเครื่องมือซอฟต์แวร์จะทำโดยอัตโนมัติ
Ilmari Karonen

1
ฉันไม่มีรุ่นที่ไม่ได้รับการเพิ่มประสิทธิภาพด้วยการไล่ระดับสีคงที่อีกต่อไป แต่ถ้าฉันแก้ไข SVG ดั้งเดิมด้วยตนเองเพื่อแทนที่บิตแมปด้วยรหัสล่าสุด<radialGradient>และ<path>จากรหัสที่ได้รับการปรับปรุงด้วยมือ SVGOMG จะปรับภาพ 5.8 kB ให้เหมาะสม 4.02 kB (4.11 kB prettified) และดูเหมือนว่าจะทำงานได้อย่างทั่วถึง ฉันไม่เห็นโอกาสที่พลาดไปอย่างชัดเจนจริงๆ (เล่นกับมันอีกเล็กน้อยฉันสังเกตว่าบางครั้งมันล้มเหลวในการรวมกลุ่มติดต่อกันด้วย attrs ที่เหมือนกันบางครั้ง Inkscape ดูเหมือนว่าจะสร้างสิ่งเหล่านั้นเช่นเมื่อปรับหน้าให้พอดีกับรูปวาด)
Ilmari Karonen

@IlmariKaronen ขอบคุณที่มีรูปลักษณ์ใช้มันบน 22kb SVG ดั้งเดิมใน Dropbox นำมันลงไปที่ 3.42kb บนดิสก์สำหรับฉันความคิดใด ๆ ว่าทำไมฉันถึงเล็กลง? (ฉันเปิดใช้งานทุกตัวเลือก) แอพนี้อาจเป็นตัวเลือกที่ดีที่สุด (ง่ายที่สุด / เร็วที่สุด) สำหรับกรณีส่วนใหญ่ ฉันไม่มีส่วนเกี่ยวข้องกับแอพมันยอดเยี่ยมมาก!
Dom

1
ดูตัวควบคุมอย่างใกล้ชิด: หากคุณเลือก "ลบภาพแรสเตอร์" เมื่อปรับ SVG ดั้งเดิมให้เหมาะสมการแรเงาบนคอนโทรลเลอร์จะหายไปอย่างสมบูรณ์ (เพราะจริง ๆ แล้วเป็น PNG กึ่งโปร่งใสแบบฝังตัว) คุณสามารถเห็นได้จริงถ้าคุณเปรียบเทียบภาพหน้าจอในคำตอบของคุณกับ JPEG ดั้งเดิม เวอร์ชั่น 4.02 kB ที่ฉันได้รับมีขนาดใหญ่กว่าเนื่องจากมีเส้นทางพิเศษและการไล่ระดับสีเพื่อแทนที่แรเงาที่ลบออก
Ilmari Karonen

@IlmariKaronen ฉันคิดว่าฉันเห็นความแตกต่างมันเล็กน้อยมากฉันไม่แน่ใจว่าตาของฉันกำลังเล่นเล่ห์เหลี่ยม มันเป็นจุดที่ดีฉันได้ทำงานกับสีที่เป็นของแข็งใน SVG แล้วดังนั้นฉันจะคำนึงถึงเรื่องนี้ในอนาคตขอบคุณ
Dom
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.