ฉันจะปรับขนาด SVG ผ่านทางบรรทัดคำสั่งได้อย่างไร


17

SVG มีคุณสมบัติเหล่านี้ซึ่งกำหนดขนาดของมัน:

width="146.91299pt"
height="78.079002pt"
viewBox="0 0 146.913 78.079"

ฉันต้องการขยาย SVG ที่กำหนดให้เป็นด้วย400ptโดยบรรทัดคำสั่งโดยไม่ทำให้อัตราส่วนภาพแตกหัก ซึ่งหมายความว่าทั้งสามค่าข้างต้นจะต้องมีการเปลี่ยนแปลงอย่างถูกต้องและทุกจุดในรหัส svg ต่อไปนี้ ฉันไม่ต้องการเปลี่ยนขนาดผ้าใบ แต่เปลี่ยนขนาดภาพ svg ทั้งหมด และฉันไม่ต้องการทำด้วย GUI / ด้วยมือ แต่ฉันต้องการทำกับ CLI

ฉันจะปรับขนาด SVG โดยอัตโนมัติตามบรรทัดคำสั่งเป็นความกว้างที่กำหนดได้อย่างไร

เหตุผล: ภาพตัวอย่างของ Wikipedia ดูไม่ดีหากภาพมีขนาดเล็กเกินไป ดูภาพนี้เป็นตัวอย่าง

ฉันจะทำงานนี้ด้วย Inkscape-GUI ได้อย่างไร

  1. Shift + Ctrl + M (แปลง)
  2. สเกล (ตรวจสอบ "สเกลตามสัดส่วน")
  3. ป้อนความกว้าง
  4. Shift + Ctrl + D (คุณสมบัติเอกสาร)
  5. ปรับหน้าให้พอดีกับการเลือก

ตอนนี้ฉันต้องการ CLI แบบอัตโนมัติเพื่อทำสิ่งนี้

อย่างไรก็ตาม inkscape ก็ใช้งานได้ง่าย

<g transform="matrix(1.6838397,0,0,1.6838397,-3.3543029,-3.3542794)"
 id="surface0">

เพื่อภาพทั้งหมด


ระบบปฏิบัติการใดที่คุณใช้
terdon

Ubuntu 10.04.4 LTS (ฉันกำลังจะอัปเดต ... )
Martin Thoma

ไฟล์ SVG เป็นเพียงไฟล์ข้อความ คุณอาจจะสามารถแก้ไขไฟล์และเปลี่ยนwidth, heightและค่าเพื่อสิ่งที่ต้องการviewBox width="100%" height="100%" viewBox="0 0 400 212.58569"
martineau

ฉันรู้ว่ามันเป็นเพียงไฟล์ข้อความ แต่ถ้าฉันแก้ไขเฉพาะค่าเหล่านี้ขนาดของภาพจะไม่เปลี่ยนแปลง การเปลี่ยนแปลงขนาดผ้าใบเท่านั้น การแก้ไขด้วยมือไม่ใช่ตัวเลือกฉันระบุอย่างชัดเจนว่าฉันต้องการเปลี่ยนโดยอัตโนมัติ
Martin Thoma

ใช่ฉันรู้ว่าคุณขอวิธีอัตโนมัติโดยอัตโนมัติ แต่คิดว่าถ้าคุณสามารถคิดได้ว่าจะเปลี่ยนแปลงข้อความอะไรคุณก็สามารถทำให้เป็นอัตโนมัติได้โดยใช้เครื่องมือแก้ไขข้อความที่มีอยู่จำนวนหนึ่ง (เช่น ตามsedคำตอบของ @ terdon) ปัญหาหนึ่งที่คุณอาจพบคือค่าที่ต้องการอาจแตกต่างจากไฟล์. svg อื่น ๆ ที่คุณต้องการทำสิ่งเดียวกัน
martineau

คำตอบ:


15

rsvg-convertจากlibrsvg2-binแพคเกจสามารถปรับขนาด svg ของ

ดูคำตอบนี้สำหรับคำแนะนำแบบเต็ม


4
rsvg-convert -a -w 500 -f svg Vector-triangle-inequality.svg -o Result.svgทำงาน แต่ rsvg-converter ดูเหมือนจะทำมากกว่าการปรับขนาดเท่านั้น
Martin Thoma

2
@moose อย่างไรก็ตามตามที่ระบุไว้ในคำตอบนั้น rsvg-convert ใช้คะแนนไม่ใช่พิกเซล หากคุณโชคดีคุณสามารถแบ่งขนาดที่คุณต้องการได้ 1.25 อย่างไรก็ตามหากคุณต้องการบางสิ่งบางอย่างเช่น 24px (19.2 ในคะแนน) คุณโชคไม่ดีที่ไม่ใส่จำนวนเต็มหรือความกว้าง (ไม่แน่ใจว่า SVG อนุญาตหรือไม่)
Matthew Flaschen

@ MartinThoma ใช่แน่นอน ไฟล์เอาต์พุต SVG มีขนาดใหญ่เป็นสองเท่าของต้นฉบับ ฉันสงสัยว่าทำไม? การอ่านrsvg-convert --helpไม่ได้ให้เบาะแสใด ๆ
Serge Stroobandt

1
rsvg แปลงยังดูเหมือนว่าจะแปลงเส้นทางที่ถูกลูบไปยังเส้นทางที่ระบุไว้ คุณอาจไม่ต้องการนี้ (ฉันรู้ว่าฉันทำไม่ได้)
scruss

1
เครื่องมือนี้ดูเหมือนจะติดขัดแปลงเป็นองค์ประกอบแต่ละรายการและไม่ได้เปลี่ยนขนาดดั้งเดิม
rtaft

3

หากคุณเพียงต้องการเปลี่ยนภาพหนึ่งภาพให้เปิดในโปรแกรมแก้ไขข้อความ (ตัวอย่างเช่น emacs) และเปลี่ยนรายการความกว้าง

สำหรับ geekier วิธี CLI เท่านั้นใช้ sed:

$ sed 's/width=\"146.91299pt\"/width=\"400pt\"/' orig.svg > new.svg

สิ่งนี้จะไม่ปรับขนาดภาพ แต่เพียงตั้งค่าความกว้าง


อาจเป็นวิธีที่ดีกว่า แต่แน่นอนหนึ่งที่สามารถทำงานในโหมดแบทช์สำหรับภาพจำนวนมากกำลังใช้ inkscape จากบรรทัดคำสั่ง:

$ inkscape -z -e out.png -w 400 -h 400 in.svg

สำหรับไฟล์จำนวนมาก (สมมติว่าคุณต้องการให้ไฟล์ทั้งหมดมีความกว้างเท่ากัน) ให้ทำดังต่อไปนี้ มันต้องการการแปลงเป็น png และสมมติว่าไม่มีช่องว่างในชื่อไฟล์ของคุณ:

$ for n in $(ls *svg | sed 's/.svg//'); do inkscape -z -e $n.png -w 400 -h 400 $n.svg; done

การแปลงของImageMagickเป็นตัวเลือกแรกของฉัน แต่ดูเหมือนว่าจะแตกเมื่อปรับขนาด svgs


7
คำสั่ง inkscape ของคุณให้ผลลัพธ์เป็น PNG แต่ฉันต้องการ SVG คำสั่ง svg ของคุณไม่เพียง แต่เปลี่ยนขนาดผ้าใบ แต่ไม่ใช่ขนาดของรูปภาพ คุณไม่สามารถใช้โปรแกรมแก้ไขข้อความและเปลี่ยนค่าที่ได้กล่าวไว้ข้างต้นเท่านั้น ฉันคิดว่าฉันต้องชี้แจงคำถาม
Martin Thoma

คุณต้องเพิ่มแท็ก: ... "> <g transform =" scale (2) "> <path .... /> </g> </svg> เพื่อปรับขนาดภาพด้วยปัจจัยเดียวกัน
Stofke
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.