कमांड लाइन पर उनके कैनवास पर svg चित्र कैसे फिट करें?


13

.svgकमांड लाइन पर फ़ाइलें क्रॉप करना सरल है: $ inkscape --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose *.svg

मुझे इसके विपरीत करने की जरूरत है। मैं ड्राइंग को एक 64 x 64बिंदु कैनवास (पहले से ही सभी .svgफाइलों में सेट ) में फिट करना चाहता हूं । दुर्भाग्य से Inkscape एक FitDrawingToCanvasकमांड प्रदान नहीं करता है । इसके अलावा, फिटिंग को ड्राइंग के पहलू अनुपात को रखना चाहिए।

अगर यह मायने रखता है: मैं उबंटू रेयरिंग का उपयोग कर रहा हूं।


1
ड्राइंग करने के लिए कैनवास को फिट करने के बाद आकार बदल जाएगा? देखें graphicdesign.stackexchange.com/questions/6574/...
Takkat

दो प्रश्न: (1) कैनवास का आकार पहले से ही प्रत्येक उदाहरण में सेट है, लेकिन चित्र कैनवास से बड़े हैं; या आप एक अलग svg दस्तावेज़ में एक svg ड्राइंग सम्मिलित कर रहे हैं ?; (२) "पहलू अनुपात को बनाए रखें": यह आपके प्रश्नों में उल्लिखित ६४ वर्ग वर्ग कैनवास के प्रकाश में भ्रामक है, लेकिन क्या आपके पास गैर-वर्ग सामग्री को संभालने के लिए एक प्रस्तावित स्वचालित निर्णय प्रक्रिया है? उदाहरण के लिए ऊंचाई सभी मामलों में 64pt होनी चाहिए ...
क्षितिज अनुपात

@ तक्कत: संकेत के लिए धन्यवाद। वर्कफ़्लो काम करता है, लेकिन पहलू अनुपात नष्ट हो जाता है। उस के लिए एक समाधान की तलाश करेंगे ...
स्टीफन एंडरूलिस

@horatio: (1) कैनवास से छोटे में ड्राइंग और हाँ, दोनों एक ही फ़ाइल में हैं। (2) मैं ड्राइंग को उस बिंदु पर स्केल करना चाहता हूं जो अधिकतम (आरेखण, ड्राइंगहाइट) = 64pt है।
स्टेफन एंडरूलिस

@ तक्कत: rsvg-Convert का एक तर्क है
प्रशासन

जवाबों:


2

मुझे इस प्रश्न में ऐसा करने का एक तरीका मिला: Inkscape - Command Drawing to Page through Command Line / Terminal

संपादित करने के लिए छवि के रूप में "foo.svg":

inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit foo.svg

वर्तमान निर्देशिका में सभी svg छवियों को संपादित करने के लिए:

inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileClose *.svg

लेकिन यह दूसरा कमांड एक टन विंडोज़ खोलता है, जो आपके कंप्यूटर को बहुत अधिक छवियों को संपादित करने पर दुर्घटनाग्रस्त कर देगा। केवल लिनक्स के लिए , यह कमांड बेहतर काम करेगा:

for img in $(ls *.svg) ; do inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit $img ; done

उपरोक्त कमांड के लिए, यदि कोई भी फाइल सिम्बलिंक है, तो Inkscape उस टारगेट फाइल को एडिट कर देगा जिसे सिमिलिंक इंगित करता है। यदि आप नहीं चाहते हैं कि Inkscape ऐसा करे, तो आप इस आदेश के साथ किसी भी सहानुभूति को फ़िल्टर कर सकते हैं:

for img in $(ls *.svg) ; do if [[ $(readlink $img) == "" ]] ; then inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit $img ; fi ; done


जब मैं इस पर होता हूं, तो मैं इसके लिए बनी बैश स्क्रिप्ट को पोस्ट कर सकता हूं:

#!/bin/bash
# inkscape-center <file-or-directory>...

_analyse() {
    if [ -d "${1}" ] ; then
        _centerAll "${1}" ;
    else
        _center "${1}" ;
    fi
}

_centerAll() {
    cd "${1}" ;
    for img in $(ls "*.svg") ; do
        _filterSyms "${img}" ;
    done
}

_filterSyms() {
    if [[ $(readlink "${1}") == "" ]] ; then
        _center "${1}"
    fi
}

_center() {
    inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit "${1}"
}

for arg ; do
    _analyse "${arg}" ;
done

मैंने इसे बुलाया inkscape-centerऔर इसे इस तरह चलाया:

inkscape-center <file-or-directory>

आप जितना चाहें उतने तर्क देते हैं, इसलिए आप कुछ इस तरह से कर सकते हैं:

inkscape-center 1st.svg 2nd.svg 3rd.svg 4th.svg

सावधान रहें - यदि आप एक फ़ाइल के बजाय एक निर्देशिका निर्दिष्ट करते हैं, तो यह उस निर्देशिका में प्रत्येक svg फ़ाइल को संपादित करेगा।


1

आप जो चाहते हैं उसे पूरा करने के लिए व्यूबॉक्स का उपयोग कर सकते हैं। मुझे नहीं पता कि क्या इनक्सस्केप के भीतर से ऐसा करने का कोई तरीका है, लेकिन चूंकि एसवीजी एक मानक प्रारूप है और एक और उपकरण हो सकता है जो आपके इच्छित काम को करेगा। "एसवीजी कमांड लाइन टूल्स" के लिए एक त्वरित खोज ने सीएसएस आइकन बनाने के लिए इस एक सहित कुछ दिलचस्प परिणाम प्रकट किए ।

एक दूसरा विकल्प यह करने के लिए अपनी पसंद की भाषा में अपना टूल लिखना होगा। मूल जिस्ट आपके दस्तावेज़ की ऊँचाई पर व्यूबॉक्स सेट करना है, फिर दस्तावेज़ की चौड़ाई और ऊँचाई सेट करना चाहते हैं। अंत में, PreserveAspectRatio विशेषता सेट करें।

यहां बताए गए संशोधनों को एक दस्तावेज़ पर मूल रूप से देखा गया है जो मूल रूप से 744x1052 था।

<svg
   width="64"
   height="64"
   viewBox="0 0 744 1052"
    preserveAspectRatio="xMinYMin slice"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.