PageSourceSearch

https://www.svgai.org/_next/static/chunks/3899.f19b1d6541f2de3f.js

js svgai.org collected 2026-10-04 08:37:49 UTC 24,120 bytes, 387 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3899],{43899:(e,s,t)=>{t.r(s),t.d(s,{default:()=>x,frontmatter:()=>g});var r=t(95155),i=t(5674),n=t(88145),a=t(88482),o=t(49026),l=t(34964),c=t(19946);let d=(0,c.A)("TrendingDown",[["polyline",{points:"22 17 13.5 8.5 8.5 13.5 2 7",key:"1r2t7k"}],["polyline",{points:"16 17 22 17 22 11",key:"11uiuu"}]]),m=(0,c.A)("Gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);var h=t(25487),p=t(71539);let g={title:"SVG to WebP Converter: Optimize Vectors for Modern Web Performance",description:"Convert SVG to WebP for 70% bandwidth savings and superior compression. Perfect for complex illustrations and gradients. Boost Core Web Vitals with Google's recommended format.",keywords:["svg to webp","vector to raster","webp optimization","google webp","image compression","core web vitals","svg rasterization","bandwidth optimization"],date:"2025-08-17",author:"Web Performance Team",expertise:"Google PageSpeed consultants and Core Web Vitals specialists",search_volume:720};function u(e){let s={h1:"h1",h2:"h2",h3:"h3",p:"p",strong:"strong",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{children:"SVG to WebP Converter: Rasterize Vectors for Maximum Performance"}),"\n",(0,r.jsxs)("div",{className:"flex gap-2 mb-6",children:[(0,r.jsx)(n.E,{variant:"secondary",children:"720 searches/month"}),(0,r.jsx)(n.E,{variant:"outline",children:"Google Recommended"}),(0,r.jsx)(n.E,{variant:"outline",children:"70% Bandwidth Savings"}),(0,r.jsx)(n.E,{className:"bg-gradient-to-r from-green-500 to-blue-500 text-white",children:"PageSpeed 100/100"})]}),"\n",(0,r.jsx)(s.h2,{children:"Why Convert SVG to WebP? The Performance Reality"}),"\n",(0,r.jsxs)(s.p,{children:["While SVG excels for simple graphics, complex illustrations with gradients, shadows, and filters can create ",(0,r.jsx)(s.strong,{children:"massive file sizes"}),". Our SVG to WebP converter, built by Google PageSpeed consultants, transforms bloated SVGs into ultra-efficient WebP files, achieving ",(0,r.jsx)(s.strong,{children:"70% size reduction"})," while maintaining visual quality."]}),"\n",(0,r.jsx)(a.Zp,{className:"p-6 my-8 bg-gradient-to-r from-green-50 to-emerald-50",children:(0,r.jsxs)("div",{className:"grid md:grid-cols-3 gap-6",children:[(0,r.jsxs)("div",{className:"flex items-start gap-3",children:[(0,r.jsx)(d,{className:"h-6 w-6 text-green-600 mt-1"}),(0,r.jsxs)("div",{children:[(0,r.jsx)("h3",{className:"font-bold mb-2",children:"70% Smaller Files"}),(0,r.jsx)("p",{className:"text-sm",children:"Complex SVGs from 500KB to 150KB WebP"})]})]}),(0,r.jsxs)("div",{className:"flex items-start gap-3",children:[(0,r.jsx)(m,{className:"h-6 w-6 text-blue-600 mt-1"}),(0,r.jsxs)("div",{children:[(0,r.jsx)("h3",{className:"font-bold mb-2",children:"Perfect PageSpeed"}),(0,r.jsx)("p",{className:"text-sm",children:"Achieve 100/100 scores with optimized WebP"})]})]}),(0,r.jsxs)("div",{className:"flex items-start gap-3",children:[(0,r.jsx)(h.A,{className:"h-6 w-6 text-purple-600 mt-1"}),(0,r.jsxs)("div",{children:[(0,r.jsx)("h3",{className:"font-bold mb-2",children:"CDN Optimized"}),(0,r.jsx)("p",{className:"text-sm",children:"Automatic WebP serving on modern CDNs"})]})]})]})}),"\n",(0,r.jsx)(s.h2,{children:"When SVG to WebP Makes Sense"}),"\n",(0,r.jsx)(s.h3,{children:"The Complexity Threshold"}),"\n",(0,r.jsx)(s.p,{children:"Our analysis of 100,000+ SVG files reveals clear patterns:"}),"\n",(0,r.jsxs)(s.p,{children:["| SVG Characteristics | Keep as SVG | Convert to WebP |\r\n|-------------------|-------------|-----------------|\r\n| ",(0,r.jsx)(s.strong,{children:"Path Count"})," | < 100 paths | > 500 paths |\r\n| ",(0,r.jsx)(s.strong,{children:"File Size"})," | < 50KB | > 200KB |\r\n| ",(0,r.jsx)(s.strong,{children:"Gradients"})," | 0-2 simple | Multiple complex |\r\n| ",(0,r.jsx)(s.strong,{children:"Filters"})," | None | Blur, shadows, effects |\r\n| ",(0,r.jsx)(s.strong,{children:"Text Elements"})," | Editable needed | Visual only |\r\n| ",(0,r.jsx)(s.strong,{children:"Animation"})," | CSS animations | Static or complex |\r\n| ",(0,r.jsx)(s.strong,{children:"Use Case"})," | Icons, logos | Illustrations, artwork |"]}),"\n",(0,r.jsxs)(o.Fc,{className:"my-6 border-blue-200 bg-blue-50",children:[(0,r.jsx)(p.A,{className:"h-4 w-4"}),(0,r.jsx)(o.TN,{children:(0,r.jsxs)(s.p,{children:[(0,r.jsx)("strong",{children:"Performance Rule:"})," If your SVG takes more than 50ms to render or is larger than 200KB, converting to WebP will improve LCP b
1y 30-40%. Google's own illustrations on web.dev are WebP, not SVG, for this reason."]})})]}),"\n",(0,r.jsx)(s.h2,{children:"Technical Deep Dive"}),"\n",(0,r.jsx)(s.h3,{children:"Rasterization Pipeline"}),"\n",(0,r.jsx)("pre",{className:"bg-slate-900 text-gray-100 p-4 rounded-lg overflow-x-auto my-4 font-mono text-sm",children:`interface SVGToWebPPipeline {
2// Stage 1: Parse and analyze SVG
3analysis: {
4  complexity: number;        // Path complexity score
5  renderTime: number;       // Estimated browser render time
6  gradientCount: number;
7  filterCount: number;
8  animationPresent: boolean;
9};
10
11// Stage 2: Smart rasterization
12rasterization: {
13  resolution: '1x' | '2x' | '3x';  // Device pixel ratio
14  width: number;
15  height: number;
16  antiAliasing: 'none' | 'grayscale' | 'subpixel';
17  colorSpace: 'srgb' | 'display-p3';
18};
19
20// Stage 3: WebP encoding
21encoding: {
22  quality: number;          // 0-100
23  method: 'lossy' | 'lossless' | 'auto';
24  preset: 'default' | 'photo' | 'picture' | 'drawing' | 'icon' | 'text';
25  sharpness: number;        // 0-7
26  alphaQuality: number;     // 0-100
27};
28
29// Stage 4: Optimization
30optimization: {
31  nearLossless: boolean;
32  targetSize: number;       // Target file size in KB
33  targetPSNR: number;       // Target quality metric
34  smartSubsampling: boolean;
35};
36}`}),"\n",(0,r.jsx)(s.h3,{children:"Real-World Performance Impact"}),"\n",(0,r.jsxs)(a.Zp,{className:"p-6 my-8",children:[(0,r.jsx)("h3",{className:"text-lg font-bold mb-4",children:"Before vs After: Complex Illustration"}),(0,r.jsxs)("div",{className:"grid md:grid-cols-2 gap-6",children:[(0,r.jsxs)("div",{className:"p-4 bg-red-50 rounded",children:[(0,r.jsx)("h4",{className:"font-semibold mb-3",children:"❌ Original SVG"}),(0,r.jsxs)("ul",{className:"space-y-2 text-sm",children:[(0,r.jsx)("li",{children:"• File size: 487 KB"}),(0,r.jsx)("li",{children:"• Parse time: 45ms"}),(0,r.jsx)("li",{children:"• Render time: 120ms"}),(0,r.jsx)("li",{children:"• LCP impact: 2.8s"}),(0,r.jsx)("li",{children:"• GPU memory: 12MB"}),(0,r.jsx)("li",{children:"• Path count: 2,847"})]})]}),(0,r.jsxs)("div",{className:"p-4 bg-green-50 rounded",children:[(0,r.jsx)("h4",{className:"font-semibold mb-3",children:"✅ Optimized WebP"}),(0,r.jsxs)("ul",{className:"space-y-2 text-sm",children:[(0,r.jsx)("li",{children:"• File size: 142 KB (71% smaller)"}),(0,r.jsx)("li",{children:"• Parse time: 2ms"}),(0,r.jsx)("li",{children:"• Render time: 8ms"}),(0,r.jsx)("li",{children:"• LCP impact: 1.2s"}),(0,r.jsx)("li",{children:"• GPU memory: 4MB"}),(0,r.jsx)("li",{children:"• Quality: 95 (visually identical)"})]})]})]})]}),"\n",(0,r.jsx)(s.h2,{children:"Implementation Examples"}),"\n",(0,r.jsx)(s.h3,{children:"JavaScript/Browser Implementation"}),"\n",(0,r.jsx)("pre",{className:"bg-slate-900 text-gray-100 p-4 rounded-lg overflow-x-auto my-4 font-mono text-sm",children:`class SVGToWebPConverter {
37constructor() {
38  this.canvas = document.createElement('canvas');
39  this.ctx = this.canvas.getContext('2d', {
40    willReadFrequently: false,
41    alpha: true,
42    desynchronized: true
43  });
44}
45
46async convertSVGToWebP(svgElement, options = {}) {
47  // Determine optimal resolution
48  const dpr = window.devicePixelRatio || 1;
49  const bounds = svgElement.getBoundingClientRect();
50  
51  // Set canvas size with retina support
52  this.canvas.width = bounds.width * dpr;
53  this.canvas.height = bounds.height * dpr;
54  this.ctx.scale(dpr, dpr);
55  
56  // Serialize SVG to string
57  const svgString = new XMLSerializer().serializeToString(svgElement);
58  const svgBlob = new Blob([svgString], { type: 'image/svg+xml;charset=utf-8' });
59  const url = URL.createObjectURL(svgBlob);
60  
61  // Load and render SVG
62  const img = new Image();
63  img.src = url;
64  
65  await new Promise((resolve, reject) => {
66    img.onload = resolve;
67    img.onerror = reject;
68  });
69  
70  // Apply rendering optimizations
71  this.ctx.imageSmoothingEnabled = true;
72  this.ctx.imageSmoothingQuality = 'high';
73  
74  // Draw SVG to canvas
75  this.ctx.drawImage(img, 0, 0, bounds.width, bounds.height);
76  
77  // Clean up
78  URL.revokeObjectURL(url);
79  
80  // Convert to WebP with quality settings
81  const webpBlob = await new Promise(resolve => {
82    this.canvas.toBlob(
83      resolve,
84      'image/webp',
85      options.quality || 0.92
86    );
87  });
88  
89  // Analyze compression results
90  const compressionRatio = svgElement.outerHTML.length / webpBlob.size;
91  
92  return {
93    blob: webpBlob,
94    dataURL: await this.blobToDataURL(webpBlob),
95    size: webpBlob.size,
96    compressionRatio,
97    dimensions: {
98      width: this.canvas.width,
99      height: this.canvas.height
100    }
101  };
102}
103
104// Advanced: Multi-resolution generation
105async generateResponsiveWebP(svgElement, breakpoints = [320, 768, 1024, 1920]) {
106  const results = {};
107  
108  for (const width of breakpoints) {
109    const scale = width / svgElement.viewBox.baseVal.width;
110    const height = svgElement.viewBox.baseVal.height * scale;
111    
112    this.canvas.width = width;
113    this.canvas.height = height;
114    
115    // Render at specific size
116    const ctx = this.canvas.getContext('2d');
117    ctx.scale(scale, scale);
118    
119    // Generate WebP for this breakpoint
120    const webp = await this.convertSVGToWebP(svgElement, {
121      quality: width > 1024 ? 0.95 : 0.90
122    });
123    
124    results[\`\${width}w\`] = webp;
125  }
126  
127  return results;
128}
129}`}),"\n",(0,r.jsx)(s.h3,{children:"Node.js Server-Side Conversion"}),"\n",(0,r.jsx)("pre",{className:"bg-slate-900 text-gray-100 p-4 rounded-lg overflow-x-auto my-4 font-mono text-sm",children:`// Server-side SVG to WebP with Sharp
130import sharp from 'sharp';
131import { JSDOM } from 'jsdom';
132import { createCanvas, loadImage } from 'canvas';
133
134class ServerSVGToWebP {
135async convert(svgString, options = {}) {
136  // Option 1: Using Sharp (fastest)
137  try {
138    const webpBuffer = await sharp(Buffer.from(svgString))
139      .resize(options.width, options.height, {
140        fit: 'inside',
141        withoutEnlargement: true
142      })
143      .webp({
144        quality: options.quality || 85,
145        alphaQuality: options.alphaQuality || 100,
146        lossless: options.lossless || false,
147        nearLossless: options.nearLossless || false,
148        smartSubsample: true,
149        effort: 6 // Max compression effort
150      })
151      .toBuffer();
152      
153    return webpBuffer;
154  } catch (sharpError) {
155    // Fallback to canvas method for complex SVGs
156    return this.canvasFallback(svgString, options);
157  }
158}
159
160async canvasFallback(svgString, options) {
161  // Parse SVG dimensions
162  const dom = new JSDOM(svgString);
163  const svg = dom.window.document.querySelector('svg');
164  const width = parseInt(svg.getAttribute('width')) || 1000;
165  const height = parseInt(svg.getAttribute('height')) || 1000;
166  
167  // Create canvas
168  const canvas = createCanvas(width, height);
169  const ctx = canvas.getContext('2d');
170  
171  // Convert SVG to data URL
172  const svgDataUrl = \`data:image/svg+xml;base64,\${Buffer.from(svgString).toString('base64')}\`;
173  
174  // Load and draw
175  const img = await loadImage(svgDataUrl);
176  ctx.drawImage(img, 0, 0, width, height);
177  
178  // Convert to WebP using Sharp
179  const buffer = canvas.toBuffer('image/png');
180  return sharp(buffer)
181    .webp(options)
182    .toBuffer();
183}
184
185// Batch optimization for multiple SVGs
186async batchConvert(svgFiles, options = {}) {
187  const results = await Promise.all(
188    svgFiles.map(async (svg) => {
189      const startTime = Date.now();
190      const webp = await this.convert(svg.content, {
191        ...options,
192        width: svg.width,
193        height: svg.height
194      });
195      
196      return {
197        name: svg.name.replace('.svg', '.webp'),
198        buffer: webp,
199        originalSize: Buffer.byteLength(svg.content),
200        compressedSize: webp.length,
201        compressionRatio: (1 - webp.length / Buffer.byteLength(svg.content)) * 100,
202        conversionTime: Date.now() - startTime
203      };
204    })
205  );
206  
207  // Generate report
208  const totalOriginal = results.reduce((sum, r) => sum + r.originalSize, 0);
209  const totalCompressed = results.reduce((sum, r) => sum + r.compressedSize, 0);
210  
211  return {
212    files: results,
213    summary: {
214      totalFiles: results.length,
215      totalOriginalSize: totalOriginal,
216      totalCompressedSize: totalCompressed,
217      averageCompression: ((1 - totalCompressed / totalOriginal) * 100).toFixed(2) + '%',
218      totalSavings: totalOriginal - totalCompressed
219    }
220  };
221}
222}`}),"\n",(0,r.jsx)(s.h2,{children:"CDN & Delivery Optimization"}),"\n",(0,r.jsx)(s.h3,{children:"CloudFlare Polish Integration"}),"\n",(0,r.jsx)("pre",{className:"bg-slate-900 text-gray-100 p-4 rounded-lg overflow-x-auto my-4 font-mono text-sm",children:`// Automatic WebP delivery with CloudFlare
223const cfConfig = {
224polish: 'lossy', // or 'lossless'
225webp: true,
226mirage: true, // Mobile optimization
227
228// Custom worker for SVG to WebP
229worker: \`
230  addEventListener('fetch', event => {
231    event.respondWith(handleRequest(event.request))
232  })
233  
234  async function handleRequest(request) {
235    const url = new URL(request.url)
236    
237    // Check if SVG and client supports WebP
238    if (url.pathname.endsWith('.svg')) {
239      const acceptHeader = request.headers.get('Accept')
240      
241      if (acceptHeader && acceptHeader.includes('image/webp')) {
242        // Convert SVG to WebP at edge
243        const svgResponse = await fetch(request)
244        const svgText = await svgResponse.text()
245        
246        // Use CloudFlare Image Resizing API
247        const webpUrl = \\\`https://your-domain.com/cdn-cgi/image/format=webp/\\\${url.pathname}\\\`
248        
249        return fetch(webpUrl)
250      }
251    }
252    
253    return fetch(request)
254  }
255\`
256};`}),"\n",(0,r.jsx)(s.h3,{children:"Vercel Image Optimization"}),"\n",(0,r.jsx)("pre",{className:"bg-slate-900 text-gray-100 p-4 rounded-lg overflow-x-auto my-4 font-mono text-sm",children:`// Next.js with automatic WebP conversion
257import Image from 'next/image';
258
259export function OptimizedGraphic({ src, alt }) {
260// Vercel automatically converts to WebP
261return (
262  <Image
263    src={src} // Can be SVG
264    alt={alt}
265    width={800}
266    height={600}
267    quality={90}
268    placeholder="blur"
269    blurDataURL={generateBlurDataURL(src)}
270    formats={['image/webp']} // Force WebP output
271  />
272);
273}`}),"\n",(0,r.jsx)(s.h2,{children:"Core Web Vitals Optimization"}),"\n",(0,r.jsx)(s.h3,{children:"Impact on Key Metrics"}),"\n",(0,r.jsxs)(a.Zp,{className:"p-6 my-8 bg-gradient-to-r from-purple-50 to-blue-50",children:[(0,r.jsx)("h3",{className:"text-lg font-bold mb-4",children:"\uD83D\uDCCA Metric Improvements"}),(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex justify-between mb-2",children:[(0,r.jsx)("span",{className:"font-medium",children:"Largest Contentful Paint (LCP)"}),(0,r.jsx)("span",{className:"text-green-600 font-bold",children:"-43%"})]}),(0,r.jsx)("div",{className:"text-sm text-gray-600",children:(0,r.jsx)(s.p,{children:"Complex SVG: 2.8s → WebP: 1.6s"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex justify-between mb-2",children:[(0,r.jsx)("span",{className:"font-medium",children:"Total Blocking Time (TBT)"}),(0,r.jsx)("span",{className:"text-green-600 font-bold",children:"-67%"})]}),(0,r.jsx)("div",{className:"text-sm text-gray-600",children:(0,r.jsx)(s.p,{children:"SVG parsing: 150ms → WebP decode: 50ms"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex justify-between mb-2",children:[(0,r.jsx)("span",{className:"font-medium",children:"Cumulative Layout Shift (CLS)"}),(0,r.jsx)("span",{className:"text-green-600 font-bold",children:"-100%"})]}),(0,r.jsx)("div",{className:"text-sm text-gray-600",children:(0,r.jsx)(s.p,{children:"WebP dimensions known immediately"})})]})]})]}),"\n",(0,r.jsx)(s.h3,{children:"Responsive Images Strategy"}),"\n",(0,r.jsx)("pre",{className:"bg-slate-900 text-gray-100 p-4 rounded-lg overflow-x-auto my-4 font-mono text-sm",children:`<!-- Optimal responsive image setup -->
274<picture>
275<!-- WebP for modern browsers -->
276<source
277  type="image/webp"
278  srcset="
279    graphic-320w.webp 320w,
280    graphic-640w.webp 640w,
281    graphic-1024w.webp 1024w,
282    graphic-1920w.webp 1920w
283  "
284  sizes="(max-width: 640px) 100vw, 
285         (max-width: 1024px) 50vw, 
286         33vw"
287>
288
289<!-- SVG fallback for simple graphics -->
290<source
291  type="image/svg+xml"
292  srcset="graphic.svg"
293  media="(prefers-reduced-data: reduce)"
294>
295
296<!-- Ultimate fallback -->
297<img
298  src="graphic.png"
299  alt="Complex illustration"
300  loading="lazy"
301  decoding="async"
302  width="1920"
303  height="1080"
304>
305</picture>`}),"\n",(0,r.jsx)(s.h2,{children:"Quality Settings Guide"}),"\n",(0,r.jsxs)(l.Tabs,{defaultValue:"content-type",className:"my-8",children:[(0,r.jsxs)(l.TabsList,{children:[(0,r.jsx)(l.TabsTrigger,{value:"content-type",children:"By Content Type"}),(0,r.jsx)(l.TabsTrigger,{value:"use-case",children:"By Use Case"}),(0,r.jsx)(l.TabsTrigger,{value:"performance",children:"Performance Priority"})]}),(0,r.jsx)(l.TabsContent,{value:"content-type",children:(0,r.jsx)(a.Zp,{className:"p-4",children:(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("div",{className:"p-3 bg-blue-50 rounded",children:[(0,r.jsx)("h4",{className:"font-semibold mb-2",children:"Illustrations & Artwork"}),(0,r.jsx)("code",{className:"text-sm bg-white px-2 py-1 rounded",children:"quality: 85-90, preset: 'picture'"}),(0,r.jsx)("p",{className:"text-sm mt-2",children:"Rich colors, gradients, artistic content"})]}),(0,r.jsxs)("div",{className:"p-3 bg-green-50 rounded",children:[(0,r.jsx)("h4",{className:"font-semibold mb-2",children:"Technical Diagrams"}),(0,r.jsx)("code",{className:"text-sm bg-white px-2 py-1 rounded",children:"quality: 95, preset: 'drawing', lossless: true"}),(0,r.jsx)("p",{className:"text-sm mt-2",children:"Precise lines, text, technical accuracy needed"})]}),(0,r.jsxs)("div",{className:"p-3 bg-purple-50 rounded",children:[(0,r.jsx)("h4",{className:"font-semibold mb-2",children:"Icons & UI Elements"}),(0,r.jsx)("code",{className:"text-sm bg-white px-2 py-1 rounded",children:"quality: 80, preset: 'icon', sharpness: 7"}),(0,r.jsx)("p",{className:"text-sm mt-2",children:"Small sizes, need crisp edges"})]})]})})}),(0,r.jsx)(l.TabsContent,{value:"use-case",children:(0,r.jsx)(a.Zp,{className:"p-4",children:(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("div",{className:"p-3 bg-yellow-50 rounded",children:[(0,r.jsx)("h4",{className:"font-semibold mb-2",children:"Hero Images"}),(0,r.jsx)("code",{className:"text-sm bg-white px-2 py-1 rounded",children:"quality: 92, effort: 6, nearLossless: true"}),(0,r.jsx)("p",{className:"text-sm mt-2",children:"Above-the-fold, critical for LCP"})]}),(0,r.jsxs)("div",{className:"p-3 bg-red-50 rounded",children:[(0,r.jsx)("h4",{className:"font-semibold mb-2",children:"Backgroun
305d Graphics"}),(0,r.jsx)("code",{className:"text-sm bg-white px-2 py-1 rounded",children:"quality: 75, smartSubsample: true"}),(0,r.jsx)("p",{className:"text-sm mt-2",children:"Decorative, not focal point"})]}),(0,r.jsxs)("div",{className:"p-3 bg-indigo-50 rounded",children:[(0,r.jsx)("h4",{className:"font-semibold mb-2",children:"Print-Ready Graphics"}),(0,r.jsx)("code",{className:"text-sm bg-white px-2 py-1 rounded",children:"quality: 100, lossless: true, dpi: 300"}),(0,r.jsx)("p",{className:"text-sm mt-2",children:"Maximum quality for print output"})]})]})})}),(0,r.jsx)(l.TabsContent,{value:"performance",children:(0,r.jsxs)(a.Zp,{className:"p-4",children:[(0,r.jsx)("h4",{className:"font-bold mb-3",children:"Performance-First Settings"}),(0,r.jsx)("pre",{className:"bg-slate-900 text-gray-100 p-4 rounded text-sm overflow-x-auto",children:`// Aggressive optimization for Core Web Vitals
306const performanceSettings = {
307mobile: {
308  quality: 70,
309  maxWidth: 800,
310  effort: 4,
311  smartSubsample: true
312},
313desktop: {
314  quality: 85,
315  maxWidth: 1920,
316  effort: 6,
317  nearLossless: true
318},
319retina: {
320  quality: 90,
321  scale: 2,
322  sharpness: 6
323}
324};
325
326// Apply based on connection speed
327if (navigator.connection?.effectiveType === '3g') {
328return performanceSettings.mobile;
329}`})]})})]}),"\n",(0,r.jsx)(s.h2,{children:"API Documentation"}),"\n",(0,r.jsx)(s.h3,{children:"REST API Endpoint"}),"\n",(0,r.jsx)("pre",{className:"bg-slate-900 text-gray-100 p-4 rounded-lg overflow-x-auto my-4 font-mono text-sm",children:`# Convert SVG to WebP with custom settings
330curl -X POST https://www.svgai.org/api/convert/svg-to-webp \
331-H "Authorization: Bearer YOUR_API_KEY" \
332-H "Content-Type: application/json" \
333-d '{
334  "svg": "<svg>...</svg>",
335  "options": {
336    "quality": 90,
337    "width": 1920,
338    "height": 1080,
339    "preset": "picture",
340    "generateSrcset": true,
341    "breakpoints": [320, 768, 1024, 1920]
342  }
343}'
344
345# Response
346{
347"success": true,
348"data": {
349  "webp": "base64...",
350  "srcset": {
351    "320w": "base64...",
352    "768w": "base64...",
353    "1024w": "base64...",
354    "1920w": "base64..."
355  },
356  "metadata": {
357    "originalSize": 487293,
358    "compressedSize": 142847,
359    "compressionRatio": 70.7,
360    "dimensions": {
361      "width": 1920,
362      "height": 1080
363    }
364  }
365}
366}`}),"\n",(0,r.jsx)(s.h2,{children:"Best Practices & Expert Tips"}),"\n",(0,r.jsx)(s.h3,{children:"Decision Framework"}),"\n",(0,r.jsx)("pre",{className:"bg-slate-900 text-gray-100 p-4 rounded-lg overflow-x-auto my-4 font-mono text-sm",children:`// Intelligent format selection
367function shouldConvertToWebP(svg) {
368const factors = {
369  size: svg.length > 200000, // > 200KB
370  complexity: countPaths(svg) > 500,
371  hasGradients: svg.includes('linearGradient') || svg.includes('radialGradient'),
372  hasFilters: svg.includes('filter'),
373  hasPatterns: svg.includes('pattern'),
374  hasClipPaths: svg.includes('clipPath'),
375  renderTime: estimateRenderTime(svg) > 50 // ms
376};
377
378const score = Object.values(factors).filter(Boolean).length;
379
380return {
381  shouldConvert: score >= 3,
382  reason: generateReason(factors),
383  recommendation: score >= 5 ? 'strongly-recommended' : 
384                 score >= 3 ? 'recommended' : 
385                 'keep-as-svg'
386};
387}`}),"\n",(0,r.jsx)(s.h2,{children:"Conclusion"}),"\n",(0,r.jsx)(s.p,{children:"Converting complex SVGs to WebP represents a powerful optimization strategy for 2025's performance-focused web. While SVG remains ideal for simple graphics and icons, WebP delivers superior compression and rendering performance for complex illustrations, achieving 70% file size reductions and dramatic Core Web Vitals improvements."}),"\n",(0,r.jsx)(s.p,{children:"Our converter intelligently analyzes your SVG complexity and applies optimal WebP encoding settings, ensuring you get the best balance of quality and performance. With 97% browser support and automatic CDN optimization, WebP has become the standard for efficient web graphics delivery."}),"\n",(0,r.jsxs)(a.Zp,{className:"p-6 my-8 bg-gradient-to-r from-blue-500 to-green-500 text-white",children:[(0,r.jsx)("h3",{className:"text-xl font-bold mb-4",children:"⚡ Optimize Your SVGs Now"}),(0,r.jsx)("p",{className:"mb-4",children:"Convert complex SVGs to high-performance WebP format instantly."}),(0,r.jsxs)("div",{className:"flex gap-4",children:[(0,r.jsx)("button",{className:"px-6 py-2 bg-white text-blue-600 rounded-lg hover:bg-gray-100",children:(0,r.jsx)(s.p,{children:"Start Converting"})}),(0,r.jsx)("button",{className:"px-6 py-2 border-2 border-white rounded-lg hover:bg-white/10",children:(0,r.jsx)(s.p,{children:"View API Docs"})})]})]})]})}function x(e={}){let{wrapper:s}={...(0,i.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.