صيغة SVG
Scalable Vector Graphics
بنية XML
تختلف SVG عن كل الصيغ الأخرى في هذا الموقع، لأنها ليست ثنائية بل مجرد نص XML. يمكنك فتح ملف SVG في محرر نصوص وقراءته. وهذا يجعل إزالة البيانات الوصفية أبسط من حيث المبدأ، لكنه يعني أيضًا أن أمام المعلومات أماكن أكثر لتختبئ فيها.
فقد تظهر البيانات الوصفية على هيئة عناصر مخصصة، أو سمات على أي عنصر، أو تعليقات XML، أو تعليمات معالجة. وبرامج تحرير الرسوم المتجهية تعشق حشو بياناتها الخاصة داخل ملفات SVG.
بنية SVG الأساسية
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="100" height="100" viewBox="0 0 100 100">
<!-- Metadata elements -->
<title>My Drawing</title>
<desc>Created by John Doe</desc>
<metadata>
<rdf:RDF xmlns:rdf="...">
<!-- RDF/Dublin Core metadata -->
</rdf:RDF>
</metadata>
<!-- Vector content -->
<circle cx="50" cy="50" r="40" fill="red"/>
</svg>العناصر الأساسية
<svg>:العنصر الجذر، وفيه viewBox والأبعادxmlns:تصريحات مساحات الأسماء<defs>:تعريفات قابلة لإعادة الاستخدام (تدرجات وأنماط)<g>:عنصر التجميع
عناصر البيانات الوصفية
تحدد مواصفة SVG عدة طرق لإرفاق البيانات الوصفية، وكل أداة تسلك طريقًا مختلفًا. بعضها بديهي (فهناك عنصر <metadata> بالاسم حرفيًا)، وبعضها الآخر أكثر خفاءً.
<metadata>
حاوية لبيانات وصفية منظّمة، عادة بصيغة RDF/Dublin Core. وقد تحمل اسم المنشئ وتاريخ الإنشاء والحقوق وغيرها.
<metadata>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<rdf:Description>
<dc:creator>John Doe</dc:creator>
<dc:date>2024-01-15</dc:date>
</rdf:Description>
</rdf:RDF>
</metadata><title>
عنوان مقروء للملف أو لعناصر بعينها. ويُستخدم غالبًا لأغراض إمكانية الوصول، لكنه قد يكشف الغرض من المستند.
<desc>
عنصر الوصف. وقد يحمل معلومات مفصّلة عن الصورة أو منشئها أو الغرض منها.
تعليقات XML
قد يحمل <!-- comment --> ملاحظات المؤلف وتواريخ الإنشاء ومعلومات البرنامج أو بيانات تصحيح الأخطاء.
مساحات أسماء برامج التحرير
هنا تصبح SVG فوضوية. فكل برنامج تحرير متجهي يضيف سماته الخاصة ضمن مساحة أسماء خاصة به لتخزين خصائص لا تدعمها SVG أصلًا. افتح ملفًا من Inkscape وسترى سمات inkscape: وsodipodi: في كل مكان. وهي ليست خطرًا على الخصوصية بحد ذاتها، لكنها تكشف بصمة البرنامج الذي استخدمته.
inkscape:* / sodipodi:*
يضيف Inkscape سمات ضمن مساحة أسمائه لأسماء الطبقات ومواضع الأدلة وإعدادات المستند وسجل التحرير.
<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
inkscape:version="1.2"
sodipodi:docname="my-drawing.svg">
<sodipodi:namedview inkscape:current-layer="layer1"/>
</svg>Adobe Illustrator
يدمج Illustrator بيانات وصفية مسهبة تشمل الإصدار وإعدادات لوح الرسم وأحيانًا بيانات صيغة AI كاملة.
xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/" xmlns:x="http://ns.adobe.com/Extensibility/1.0/"
Sketch / Figma
قد تدمج أدوات التصميم الحديثة أسماء الطبقات ومعرّفات المكوّنات وإعدادات التصدير في سمات مخصصة.
تعليمات المعالجة
قد تحمل تعليمات معالجة XML (<?...?>) في بداية ملفات SVG ما يعرّف بالبرنامج المستخدم.
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/css" href="style.css"?> <!-- Created with Inkscape (http://www.inkscape.org/) -->
ما يبقى وما يُزال
- • تصريح
<?xml ...?>:يبقى (إلزامي) - •
<?xml-stylesheet ...?>:يبقى (وظيفي) - • بقية تعليمات المعالجة:تُزال
المعالجة عبر DOM
بما أن SVG هي XML صالحة، فبإمكاننا تحليلها إلى شجرة DOM وإزالة ما لا نريده بدقة جراحية. وهذا أدق من الأساليب القائمة على التعابير النمطية، ولا يكسر المحتوى الصالح عن غير قصد.
تحليل XML
تحليل ملف SVG كمستند XML مع الحفاظ على بنيته
إزالة عناصر البيانات الوصفية
حذف عناصر <metadata> و<title> و<desc>
حذف سمات برامج التحرير
إزالة inkscape:* وsodipodi:* وغيرها من مساحات أسماء المحررات
إزالة التعليقات
حذف كل تعليقات XML من المستند
تنظيف مساحات الأسماء
إزالة تصريحات مساحات الأسماء غير المستخدمة من العنصر الجذر
إعادة التسلسل
كتابة XML النظيفة من جديد في ملف SVG
خلاصة المعالجة
ما يبقى
- • كل الرسوم المتجهية (المسارات والأشكال والنصوص)
- • الأنماط وCSS
- • التدرجات والأنماط المتكررة
- • المرشّحات والتأثيرات
- • الصور المدمجة (المشار إليها)
- • viewBox والأبعاد
- • مساحات أسماء SVG المعيارية
ما يُزال
- • عنصر <metadata>
- • عنصر <title>
- • عنصر <desc>
- • تعليقات XML
- • سمات inkscape:*
- • سمات sodipodi:*
- • مساحات أسماء Adobe وSketch
- • تصريحات مساحات الأسماء غير المستخدمة
الصور المدمجة
وهنا مفاجأة تباغت كثيرين: تستطيع ملفات SVG أن تدمج صورًا نقطية على هيئة روابط بيانات بترميز base64. وتلك الملفات المدمجة من JPEG أو PNG قد تخبئ بداخلها بيانات EXIF خاصة بها.
قيد حالي
يزيل PicScrub حاليًا البيانات الوصفية على مستوى SVG، لكنه لا يفك ترميز الصور النقطية المدمجة ولا يعالجها:
<image href="data:image/jpeg;base64,/9j/4AAQ..." />
لا يعالج PicScrub حاليًا الصور النقطية المدمجة داخل ملفات SVG. ولضمان خصوصية كاملة، استخرج هذه الصور وعالجها على حدة.