Tôi có thể giảm kích thước tệp của một SVG để gần với tương đương JPEG của nó không?


37

Tôi có một hình ảnh mà tôi đang sử dụng trên một trang web. Tôi muốn sử dụng một SVG để nó có thể có kích thước bất kỳ và trông vẫn rõ nét.

  • Dropbox này chứa tệp SVG cũng như tệp Illustrator gốc.
  • Đây là bản xuất JPEG:

    Xuất JPEG

SVG có kích thước tệp lớn hơn nhiều so với JPG. Có thể tối ưu hóa SVG để nó có kích thước tệp tương tự không? Tôi có thể mất một số chất lượng nếu điều đó sẽ giúp. Tôi đã thử trình tối ưu hóa SVG này , nhưng nó không tạo ra nhiều khác biệt.

Nếu tôi lưu tệp minh họa dưới dạng JPG, theo dõi kết quả và lưu dưới dạng SVG, thì tôi nhận được kích thước tệp nhỏ hơn nhiều nhưng mất chất lượng. Điều này khiến tôi nghĩ rằng có lẽ các lớp trong bản gốc đang gây ra kích thước lớn? Hình ảnh mà tôi đang làm việc có quá phức tạp để phù hợp với SVG không?


16
Không liên quan đến câu hỏi của bạn, nhưng bạn không nên sử dụng JPG cho hình ảnh như thế này. Thay vào đó, hãy sử dụng PNG: kích thước có thể sẽ tương tự và bạn sẽ không bị giảm chất lượng.
Svick

Hãy nhận ra rằng sự so sánh sẽ phụ thuộc vào kích thước vật lý của hình ảnh. Thu nhỏ một JPEG làm tăng kích thước rất nhiều. Thu nhỏ một SVG không có hiệu lực. Có thể hình dung rằng một biểu tượng rất nhỏ sẽ nhỏ hơn dưới dạng JPEG, mặc dù tôi sẽ không gọi đồ họa của bạn là rất nhỏ.
Paul Draper

Nếu bạn không phải là người dùng Inkscape và bạn không cảm thấy tự tin khi chơi gôn SVG bằng tay, bạn có thể thích công cụ trực tuyến mà tôi đã liên kết trong câu trả lời của mình .
Dom

1
Chỉ cần thêm vào nhận xét của Svick: hình ảnh "như thế này" trong đó PNG tốt hơn là bất cứ thứ gì có các cạnh trong suốt hoặc bất cứ thứ gì có các vùng màu sắc hoặc trắng sắc nét. Nếu đó là 'đồ họa' (ví dụ: logo, biểu tượng, v.v.) không phải là 'ảnh', PNG thường tốt hơn. JPG là tốt hơn cho hình ảnh (hoặc hình ảnh thực tế hình ảnh).
user56reinstatemonica8

Câu trả lời:


40

SVG của bạn chứa một đồ họa pixel nhúng cho bóng ở phía dưới bên phải của bộ điều khiển. Điều này chịu trách nhiệm cho khoảng kích thước tập tin. Nếu bạn xóa nó, tệp SVG của bạn ngang bằng với JPEG của bạn. Bạn có thể có thể đạt được một hiệu ứng tương tự đầy đủ với một gradient.

Các kỹ thuật khác để giảm kích thước tệp SVG bao gồm:

  • Xóa tất cả Siêu dữ liệu và tương tự. Inkscape có Save dưới dạng SVG đơn giản cho việc này. Tôi cho rằng các chương trình khác có một cái gì đó tương tự.
  • Loại bỏ các nút thêm ít hình dạng, ví dụ, có các nút giả trên hình dạng bộ điều khiển của bạn.

Điều này khiến tôi nghĩ rằng có lẽ các lớp trong bản gốc đang gây ra kích thước lớn?

Trừ khi bạn đang sử dụng nhiều lớp một cách vô lý (nghĩ về một lớp cho mỗi đối tượng), các lớp không được đóng góp có liên quan đến kích thước tệp và thậm chí sau đó, nó sẽ chỉ là một phần.

Hình ảnh mà tôi đang làm việc có quá phức tạp để phù hợp với SVG không?

Nếu bạn có thể tạo một hình ảnh hợp lý từ đầu - thì nó không quá phức tạp đối với định dạng SVG. Không có thứ gọi là ngưỡng phức tạp kỳ diệu ngoài kích thước tệp phát nổ (có lẽ điều này giữ cho bất kỳ định dạng hợp lý mơ hồ nào). Tất nhiên, nếu bạn chỉ chọn độ phân giải đủ thô, bạn có thể xuất mọi SVG sang JPEG có kích thước tệp nhỏ hơn. Nhưng điều đó không nhất thiết có nghĩa là bạn không nên sử dụng SVG.


Đó là đặc biệt không có dấu vết và tương tự. Để đưa ra một ví dụ cực đoan: Nếu bạn muốn tái tạo chính xác từng pixel của ảnh bằng các nguyên hàm SVG (nghĩa là không nhúng đồ họa pixel trong SVG), bạn thực sự có thể coi kết quả là quá phức tạp để được thể hiện hiệu quả ở định dạng SVG . Nhưng đó là hy vọng thông thường.


80

Như Wrzlprmft đã chỉ ra, hơn 50% kích thước tệp SVG của bạn được đưa lên bởi một hình ảnh bitmap PNG được sử dụng để tạo hiệu ứng đổ bóng khá tinh tế trên bộ điều khiển. Chỉ cần loại bỏ hình ảnh đó và thay thế nó bằng một gradient xuyên tâm đơn giản, là đủ để thu nhỏ SVG xuống còn khoảng 10kb.

        Nguyên         Với độ dốc xuyên tâm đơn giản
Hình ảnh gốc với bóng bitmap lạ mắt ở bên trái, phiên bản chỉnh sửa với độ dốc xuyên tâm đơn giản ở bên phải.

Trong khi bạn đang ở đó, bạn cũng nên kiểm tra đường dẫn của mình để xem có gì để đơn giản hóa ở đó không. Tôi không tìm thấy nhiều, nhưng phác thảo của bộ điều khiển của bạn có một vài nút liền kề (gần giữa trên và giữa) có thể được hợp nhất mà không tạo ra bất kỳ sự khác biệt rõ ràng nào.

Đó là một cách tiết kiệm 50% dễ dàng ngay tại đó, nhưng chúng ta chưa dừng lại. Nếu bạn biết ngay cả một chút về định dạng SVG , bạn có thể làm một nhiều hơn thế.

Đầu tiên, chạy "Defs chân không" trong Inkscape để loại bỏ các định nghĩa vô dụng, sau đó lưu hình ảnh thành "SVG đơn giản". Bây giờ, đã đến lúc mở nó trong một trình soạn thảo văn bản và xem những gì chúng ta có thể loại bỏ. Tốt nhất, bạn nên sử dụng trình chỉnh sửa với bản xem trước SVG tích hợp, để bạn có thể nhanh chóng thấy được hiệu ứng nào (hy vọng là không có) các chỉnh sửa của bạn đối với sự xuất hiện của hình ảnh. Tôi sử dụng emacs cho điều đó, nhưng có những biên tập viên khác có tính năng tương tự ngoài kia.

Dù sao, với tệp SVG được mở trong trình soạn thảo văn bản của bạn, hãy bắt đầu đơn giản hóa nó!

  • Ngay trên đỉnh, có một thứ vô dụng lớn <!-- comment -->. Chỉ cần xóa nó.

  • Nếu bạn đang chỉnh sửa một SVG trực tiếp từ Illustrator, thì cũng có một <!DOCTYPE ... >dòng vô dụng . Xóa nó đi

  • Inkscape khăng khăng dán một khối siêu dữ liệu RDF vô dụng vào hình ảnh của bạn. Chỉ cần xác định vị trí <metadata ...>thẻ và xóa nó, cùng với mọi thứ lên đến và bao gồm cả việc đóng </metadata>.

  • Ngoài ra, ngay cả khi bạn lưu tệp dưới dạng "SVG đơn giản", Inkscape vẫn lưu trữ tệp đó với một loạt các thuộc tính tùy chỉnh. Tìm mọi thuộc tính bắt đầu bằng inkscape:hoặc sodipodi:xóa chúng.

  • Khi siêu dữ liệu và các thuộc tính dành riêng cho Inkscape biến mất, bạn có thể xóa tất cả các thuộc tính không gian tên XML không sử dụng khỏi <svg>thẻ. Nó phải là an toàn để loại bỏ ít nhất xmlns:rdf, xmlns:dc, xmlns:cc, xmlns:inkscapexmlns:sodipodi. Nếu có một xmlns:svgthuộc tính dư thừa , hãy loại bỏ nó. Các thuộc tính không gian tên duy nhất bạn nên để lại tại thời điểm này là:

    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
  • Các <svg>thẻ cũng có một loạt các thuộc tính vô ích khác mà bạn có thể loại bỏ một cách an toàn, chẳng hạn như enable-backgroundxml:space="preserve". (Những được chèn vào bởi nhà xuất khẩu Illustrator SVG, và Inkscape không đủ thông minh để nhận ra họ đang vô dụng.) Các viewBoxthuộc tính cũng có thể được gỡ bỏ một cách an toàn so với hình ảnh này, vì nó chỉ lặp đi lặp lại các giá trị của x, y, widthheightcác thuộc tính.

  • Bạn cũng có thể xóa encodingstandalonecác thuộc tính khỏi <?xml ... ?>thẻ một cách an toàn .

  • Bây giờ chúng ta hãy đi vào can đảm của dữ liệu hình ảnh. Vì một số lý do, Inkscape khăng khăng gán idcác thuộc tính cho mọi thành phần, ngay cả khi chúng không bao giờ được tham chiếu. Bất kỳ idthuộc tính nào có giá trị không bao giờ được lặp lại ở nơi khác trong tệp (tìm kiếm nó!) Đều an toàn để xóa. Về cơ bản, ID duy nhất bạn cần giữ là những ID cho độ dốc và có thể cho bất kỳ đối tượng nào khác (ví dụ: đường dẫn) được tìm thấy bên trong <defs>các phần.

  • Ngoài ra, Inkscape thích tạo ID dài như thế nào linearGradient4277. lg1Thay vào đó, hãy xem xét viết tắt bất kỳ ID nào mà bạn không thể xóa thành một cái gì đó ngắn như thế.

  • Ngoài ra còn có nhiều <defs>phần ngay sau nhau. Hợp nhất chúng sẽ tiết kiệm một vài byte (và đơn giản hóa cấu trúc tài liệu nói chung).

  • Ngoài ra còn có một số nhóm trống ( <g>yếu tố) ở cuối tệp. Chỉ cần thoát khỏi chúng. Cũng có thể có nhiều nhóm liên tiếp có cùng transformthuộc tính (hoặc không có nhóm nào); Nó cũng an toàn để hợp nhất những người.

  • Vì một số lý do kỳ lạ, Inkscape lưu một đường dẫn ( dthuộc tính) Bezier dự phòng cho <circle>các phần tử. Điều đó chiếm không gian hoàn toàn không có lý do, vì vậy chỉ cần xóa chúng. (Để các dthuộc tính trên <path>các phần tử là; chúng thực sự được sử dụng cho một cái gì đó.)

  • Inkscape cũng thích sử dụng CSS trong stylecác thuộc tính trong đó các thuộc tính cụ thể hơn sẽ ngắn hơn, ví dụ như viết lại fill="#4888fa"thành dài dòng hơn style="fill:#4888fa". Bạn có thể lưu một vài byte bằng cách chia các kiểu đó thành các thuộc tính riêng lẻ (và loại bỏ các kiểu chỉ vô dụng lặp lại cài đặt mặc định), nhưng điều đó làm quen với định dạng SVG hơn một chút so với hầu hết các thay đổi ở trên.

  • Ngoài ra, nếu có bất kỳ <use ... >yếu tố nào , bạn có thể lưu một vài byte bằng cách thay thế chúng bằng yếu tố thực tế mà chúng đang liên kết đến. (Tất nhiên, điều này chỉ tiết kiệm không gian nếu các yếu tố được liên kết chỉ được sử dụng một lần.) Dường như Inkscape thích xác định độ dốc hình tròn một cách gián tiếp, trước tiên xác định các điểm dừng trong a <linearGradient>, sau đó tham chiếu chúng trong a <radialGradient>; bạn có thể đơn giản hóa điều đó bằng cách di chuyển các điểm dừng trực tiếp bên trong gradient xuyên tâm và loại bỏ gradient tuyến tính hiện không được sử dụng. Như một phần thưởng, nếu, bằng cách này, bạn đã thoát khỏi tất cả các xlink:hrefthuộc tính, bạn có thể xóa xmlns:xlinkthuộc tính khỏi <svg>thẻ.

  • Nếu bạn thực sự muốn vắt kiệt từng byte cuối cùng, hãy tìm các giá trị số với quá nhiều số thập phân và làm tròn chúng thành một số hợp lý hơn. Đây là nơi mà bản xem trước trực tiếp thực sự hữu ích, vì nó cho phép bạn xem bạn có thể làm tròn giá trị bao nhiêu trước khi nó bắt đầu hiển thị. Tuy nhiên, ngay cả khi bạn không muốn kiểm tra cẩn thận từng con số để xem nó có thể được làm tròn bao nhiêu, thì ít nhất, bạn có thể chọn trái cây treo thấp như, ví dụ, làm tròn một giá trị 1.0000859pixel 1.

  • Cuối cùng, dọn sạch vết lõm và khoảng trắng trong tệp. Để giảm thiểu tối đa số byte, bạn cần đặt mọi thứ trên một dòng (hoặc ít nhất, chỉ đặt ngắt dòng trước các thuộc tính, dù sao cũng cần khoảng trắng), nhưng điều đó thực sự khó đọc. Tuy nhiên, vẫn có thể đạt được sự cân bằng hợp lý giữa khả năng đọc và tính gọn nhẹ với một số vết lõm đơn giản, bảo thủ.

Dù sao, đây là những gì tôi quản lý để chỉnh sửa hình ảnh SVG của bạn thành:

<?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>

Hình ảnh SVG này trông hoàn toàn không thể phân biệt được với hình ảnh ví dụ thứ hai ở trên và chỉ chiếm 5189 byte, ít hơn đáng kể so với hình ảnh JPEG của bạn. Tôi chắc chắn rằng nó có thể được tối ưu hóa hơn nữa, nhưng đây thực sự chỉ là một ví dụ về những gì bạn có thể làm trong vài phút với thực hành. (Tôi mất nhiều thời gian hơn để gõ câu trả lời này hơn là thực sự chỉnh sửa mã SVG.)

Cuối cùng, nén mã SVG này bằng gzip thu nhỏ nó xuống chỉ còn 1846 byte (!), Chỉ bằng một phần tư kích thước của phiên bản JPEG của bạn.


4
Chơi golf độc đáo .
Wrzlprmft

7
thoát khỏi ngắt dòng và bạn sẽ tiết kiệm thêm 50 byte :)
Yorik

15
Tôi đã phải tham gia trang web này chỉ để nâng cao câu trả lời tuyệt vời này! Làm tốt!
Karl-Johan Sjögren

Này Ilmari, tôi tự hỏi liệu bạn có thể kiểm tra ứng dụng web mà tôi đã liên kết trong một câu trả lời và xác nhận xem nó có làm mọi thứ bạn làm bằng tay không? Tôi đã chạy nó trên một SVG lớn với mức giảm đáng kinh ngạc, nhưng khi tôi cũng chạy SVG đó thông qua một dịch vụ khác trước đó, tôi đã có thể tiết kiệm thêm 2kb. Khi tôi kiểm tra mã SVG, tôi vẫn thấy một số siêu dữ liệu có liên kết đến Adobe và tôi không biết có cần thiết không. Trí tuệ SVG của bạn được đánh giá rất cao.
Dom

30

Tôi hơi ngạc nhiên khi không ai nhắc đến phần mở rộng " Scour ". Nó được đóng gói với Inkscape (kể từ v0.47) và thực hiện nhiều điều tối ưu được đề cập bởi Ilmari Karonen.


14
+1 Thật tuyệt vời! Thành thật mà nói, tôi thậm chí không biết rằng công cụ này đã tồn tại. Với các tùy chọn phù hợp, phiên bản dòng lệnh thậm chí còn đánh bại mã được tối ưu hóa bằng tay của tôi gần 200 byte và chạy nó trên mã được tối ưu hóa bằng tay sẽ giảm xuống chỉ còn 4571 byte (!).
Ilmari Karonen

5

Bạn có thể chuyển đổi nó thành một SVG đã nén (SVGZ) và đặt image.svgz trên trang web của bạn:

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

Hoặc, trong Adobe Illustrator, chỉ cần lưu dưới dạng "SVG được nén", nó sẽ ghi một tệp image.svgz.

Đối với hình ảnh thử nghiệm của bạn, nó vẫn lớn hơn JPG, mặc dù:

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

6
Các SVG được nén không hoạt động trong hầu hết, nếu không phải tất cả, IE gần đây thật đáng buồn. Ý tưởng này rất hữu ích, nhưng IE làm cho nó ít khả thi hơn. Dù sao +1 vì đó không phải lỗi của bạn IE $ ucks. :)
Dom

5
@Dom, kinh nghiệm với IE và PNG cho thấy 3-5 thập kỷ không phải năm.
Glenn Randers-Pehrson

3
Bashing IE không bao giờ hết buồn cười! :) Thật tuyệt khi chúng tôi có thể thu hút ai đó ở cấp độ kinh nghiệm của bạn đến GDSE, tôi hy vọng bạn thích nó ở đây và nếu chưa có ai nói điều đó, xin chào mừng!
Dom

2
Để kiểm tra trong IE, bạn có thể sử dụng máy ảo từ Modern.ie/en-us
Scott Carlson

4
Nếu bạn đang phục vụ nó trên một trang web, điều này sẽ mang lại lợi ích không đáng kể cho các khách hàng yêu cầu nén HTTP (thường sử dụng gzip).
Bob

3

Gần đây tôi đã tìm thấy một công cụ tại https://petercollingridge.appspot.com/svg-editor ( mã nguồn ) giúp tối ưu hóa các tệp SVG. Nó có kết quả tốt trong trường hợp này, đưa kích thước tệp xuống 3,7kB, chỉ bằng một nửa kích thước của JPG, với một chút điều chỉnh thủ công:

Sử dụng công cụ này để tối ưu hóa các tệp SVG đòi hỏi ít thời gian hơn đáng kể so với chơi golf bằng tay.


Chào mừng bạn đến với Thiết kế đồ họa SE. Lưu ý rằng người hỏi đã đề cập đến chính công cụ này trong câu hỏi. Không phải điều này vô hiệu hóa câu trả lời này, nhưng bạn có thể đặt nó vào quan điểm. Ngoài ra, bạn có ý nghĩa gì khi điều chỉnh
Wrzlprmft

Đây không hoàn toàn là cùng một công cụ như được đề cập trong câu hỏi, nhưng nó được thực hiện bởi cùng một tác giả và nằm trên cùng một tên miền. Liên kết của tác giả có một liên kết đến công cụ này, nhưng tôi đã không nhận thấy nó cho đến khi tôi đăng câu trả lời của mình; Tôi đã không xóa nó vì nó vẫn còn hữu ích. Bằng cách điều chỉnh thủ công , tôi có nghĩa là tôi đã bỏ chọn một số hộp (kết hợp đường dẫn, xóa id) để làm cho đầu ra chính xác và hạ các vị trí thập phân để cải thiện kích thước hơn nữa.
dùng60561

Như với SVGOMG (từ câu trả lời của Dom), đây cũng là khoản tiết kiệm lớn nhất dường như đến từ việc vô hiệu hóa xlink, như một hiệu ứng phụ, xóa hoàn toàn hình ảnh nhúng. Rõ ràng, thay thế hình ảnh bằng một gradient không thực sự là điều bạn có thể mong đợi một công cụ tự động thực hiện.
Ilmari Karonen

3

SVGOMG! là một ứng dụng web tuyệt vời để tối ưu hóa SVG

Theo tác giả của ứng dụng, SVGOMG là SVGO 's " M issing G UI".

Chạy nó trên hình ảnh được cung cấp sẽ đưa nó xuống chỉ 3.42kb1.4kbsau khi được nén.

Ảnh chụp màn hình SVGOMG


1
Nhìn vào bản xem trước được hiển thị, có vẻ như hầu hết các khoản tiết kiệm đến từ thực tế là nó hoàn toàn xóa hình ảnh nhúng. Rõ ràng, thay thế bitmap bằng một gradient không phải là điều người ta có thể mong đợi một công cụ phần mềm sẽ tự động làm.
Ilmari Karonen

1
Tôi không có phiên bản chưa được tối ưu hóa chỉ với độ dốc cố định nữa, nhưng nếu tôi chỉnh sửa thủ công SVG ban đầu để thay thế bitmap bằng mã cuối cùng <radialGradient><path>từ mã được tối ưu hóa bằng tay của tôi, SVGOMG sẽ tối ưu hóa hình ảnh 5,8 kB xuống 4,02 kB (4,11 kB được bổ sung) và dường như thực hiện một công việc khá kỹ lưỡng; Tôi thực sự không thấy bất kỳ cơ hội bị bỏ lỡ rõ ràng. (Chơi với nó nhiều hơn một chút, tôi đã nhận thấy rằng đôi khi không hợp nhất các nhóm liên tiếp với các thành phần giống hệt nhau; Inkscape đôi khi dường như tạo ra những thứ đó, ví dụ như khi điều chỉnh trang để phù hợp với bản vẽ.)
Ilmari Karonen

@IlmariKaronen cảm ơn vì đã xem, chạy nó trên SVG 22kb ban đầu trong Dropbox mang nó xuống 3,42kb trên đĩa cho tôi, có ý tưởng nào tại sao của tôi nhỏ hơn không? (Tôi đã kích hoạt mọi tùy chọn). Ứng dụng này có thể là tùy chọn tốt nhất (dễ nhất / nhanh nhất) cho hầu hết các trường hợp. Tôi không có liên kết với ứng dụng này, nó thật tuyệt vời!
Dom

1
Nhìn kỹ vào bộ điều khiển: nếu bạn chọn "Xóa hình ảnh raster" khi tối ưu hóa SVG gốc, bóng mờ trên bộ điều khiển sẽ biến mất hoàn toàn (vì thực tế nó là một PNG bán trong suốt). Bạn thực sự có thể nhìn thấy nó nếu bạn so sánh ảnh chụp màn hình trong câu trả lời của bạn với JPEG gốc. Phiên bản 4.02 kB tôi nhận được lớn hơn vì nó bao gồm một đường dẫn bổ sung và độ dốc để thay thế bóng đổ đã loại bỏ.
Ilmari Karonen

@IlmariKaronen Tôi nghĩ rằng tôi thấy sự khác biệt , nó rất nhẹ Tôi không chắc mắt mình có đang chơi trò bịp không. Đó là một điểm tốt, tôi chỉ làm việc với các màu đơn sắc trong SVG cho đến nay tôi sẽ ghi nhớ điều đó trong tương lai, cảm ơn.
Dom
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.