Servislere dön

Çevrimiçi SVG Düzenleyici

SVG kodunu tarayıcıda canlı önizleme ile düzenleyip indirebilirsiniz.

Dosya tarayıcıda yerel olarak işlenir • sunucuya yüklenmez • hazır SVG indirilebilir.

Önizleme

Dosya yok
SVG yükleyin Yüklemeden sonra görsel burada görünür ve kod değiştikçe güncellenir.
Boyut: — Dosya: —

SVG kodu

Живое обновление
0 karakter Değişiklikler otomatik uygulanır

Bu araç hakkında — Çevrimiçi SVG Düzenleyici

SVG kodunu tarayıcıda canlı önizleme ile düzenleyip indirebilirsiniz.

Bir SVG dosyası yükleyin veya XML kodunu yapıştırın; renkleri, boyutları, metni ve çizgileri değiştirin, sonucu anında görüntüleyip hazır SVG’yi kaydedin. Araç doğrudan DEVNEW.ORG web sayfasında çalışır ve ek bir program kurulumu gerektirmez. Site sahipleri, geliştiriciler, SEO uzmanları, tasarımcılar ve hızlı bir çevrimiçi araca ihtiyaç duyan herkes için uygundur. İş veya kişisel görevlerde ücretsiz kullanabilirsiniz.

Bunlara da bakın

'; empty.style.display = 'none'; frame.style.display = 'block'; setStatusOk(); updateMeta(result.root, source); } function parseAndSanitize(source) { try { const parser = new DOMParser(); const doc = parser.parseFromString(source, 'image/svg+xml'); const parseError = doc.querySelector('parsererror'); if (parseError) { return { ok: false, error: 'SVG kodunda sözdizimi hatası var.' }; } const root = doc.documentElement; if (!root || root.nodeName.toLowerCase() !== 'svg') { return { ok: false, error: 'Kod bir kök öğesi içermelidir.' }; } sanitizeSvg(root); return { ok: true, root: root, svg: new XMLSerializer().serializeToString(root) }; } catch (e) { return { ok: false, error: 'SVG kodu ayrıştırılamadı.' }; } } function sanitizeSvg(root) { const blockedTags = [ 'script', 'foreignObject', 'iframe', 'object', 'embed', 'audio', 'video' ]; blockedTags.forEach(function (tag) { root.querySelectorAll(tag).forEach(function (node) { node.remove(); }); }); root.querySelectorAll('*').forEach(function (node) { Array.from(node.attributes).forEach(function (attr) { const name = attr.name.toLowerCase(); const value = String(attr.value || '').trim().toLowerCase(); if (name.startsWith('on')) { node.removeAttribute(attr.name); return; } if ( (name === 'href' || name === 'xlink:href') && ( value.startsWith('javascript:') || value.startsWith('http://') || value.startsWith('https://') || value.startsWith('//') ) ) { node.removeAttribute(attr.name); } }); }); } function updateMeta(root, source) { let width = root.getAttribute('width') || ''; let height = root.getAttribute('height') || ''; const viewBox = root.getAttribute('viewBox') || ''; if ((!width || !height) && viewBox) { const values = viewBox.trim().split(/\s+/); if (values.length === 4) { if (!width) width = values[2]; if (!height) height = values[3]; } } dimensions.textContent = 'Boyut: ' + (width && height ? width + ' × ' + height : 'belirtilmemiş'); const bytes = new Blob([source]).size; fileSize.textContent = 'Файл: ' + formatBytes(bytes); } function clearPreview() { frame.srcdoc = ''; frame.style.display = 'none'; empty.style.display = 'block'; status.className = 'svg-status'; status.innerHTML = ' Dosya yok'; dimensions.textContent = 'Boyut: —'; fileSize.textContent = 'Dosya: —'; chars.textContent = code.value.length + ' karakter'; hideError(); } function setStatusOk() { status.className = 'svg-status ok'; status.innerHTML = ' SVG geçerli'; } function setStatusError() { status.className = 'svg-status error'; status.innerHTML = ' Ошибка кода'; } function showError(message) { errorBox.textContent = message; errorBox.style.display = 'block'; } function hideError() { errorBox.textContent = ''; errorBox.style.display = 'none'; } function formatBytes(bytes) { if (bytes >= 1024 * 1024) { return (bytes / 1024 / 1024).toFixed(2) + ' MB'; } if (bytes >= 1024) { return (bytes / 1024).toFixed(2) + ' KB'; } return bytes + ' Б'; } function prettyXml(xml) { xml = xml.replace(/>\s*<'); const nodes = xml.replace(//.test(trimmed)) { pad = Math.max(0, pad - 1); } out += ' '.repeat(pad) + trimmed + '\n'; if ( /^<[^!?/][^>]*[^/]?>$/.test(trimmed) && !/^<(path|circle|rect|line|polyline|polygon|ellipse|use|image|stop|br)\b/i.test(trimmed) && !trimmed.includes('