สิ่งที่ดีที่สุดของทั้งสองโลก: การทำงานกับ SVG และ HTML Canvas

เผยแพร่แล้ว: 2022-12-29

เป็นที่ทราบกันดีว่า SVG นั้นยอดเยี่ยมสำหรับความเป็นอิสระของความละเอียดและสามารถปรับขนาดเป็นขนาดใดก็ได้โดยไม่สูญเสียคุณภาพ อย่างไรก็ตาม ข้อเสียประการหนึ่งของ SVG คืออาจทำงานได้ยากหากคุณคุ้นเคยกับการทำงานกับ HTML canvas ในบทความนี้ เราจะสำรวจวิธีทำให้ SVG เล่นได้ดีกับ HTML canvas เพื่อให้คุณสามารถใช้ประโยชน์จากสิ่งที่ดีที่สุดจากทั้งสองโลก

ในบทความนี้ เราจะเรียนรู้วิธีใช้ ภาพ SVG แบบอินไลน์ หากต้องการเขียนภาพ SVG ลงในเอกสาร HTML โดยตรง ให้ใช้แท็ก *svg ใช้โค้ด VS หรือ IDE ที่ต้องการ เปิดภาพ SVG คัดลอกโค้ด แล้ววางลงในองค์ประกอบ HTML 'body'

SVG แบบอินไลน์ ในแท็ก SVG ให้รวมแอตทริบิวต์ aria-bylabel ที่สอดคล้องกับแท็ก title> สำหรับรูปร่างที่มีมากกว่า 1 ประเภท รวมถึงแท็กชื่อสำหรับแต่ละกลุ่มรูปร่างทำให้การสร้างสนุกยิ่งขึ้น การรวมคำอธิบายและแท็กชื่อเรื่องไว้ในบทความเดียวกันจะเป็นประโยชน์อย่างมากสำหรับผู้ใช้เทคโนโลยีอำนวยความสะดวก

SVG บรรทัดนั้นดีกว่าไฟล์ฝังตัวที่ไม่ได้เป็นส่วนหนึ่งของระบบไฟล์ นอกจากนี้ เนื่องจาก SVG สามารถปฏิบัติได้เหมือนกับองค์ประกอบอื่นๆ ในเอกสารของคุณ การโต้ตอบกับ CSS จึงง่ายกว่ามาก นี่เป็นสิ่งสำคัญอย่างยิ่งเมื่อโต้ตอบกับเอฟเฟ็กต์โฮเวอร์

SVG แบบอินไลน์คือมาร์กอัปประเภทหนึ่งที่รวมอยู่ในมาร์กอัปของหน้าเว็บ

คุณจะเปรียบเทียบ Html Canvas กับ Svg อย่างไร

คุณจะเปรียบเทียบ Html Canvas กับ Svg อย่างไร
ภาพจาก: https://blogspot.com

กราฟิกถูกวาดโดยใช้ JavaScript โดยใช้องค์ประกอบ HTML องค์ประกอบกราฟิกถูกกำหนดให้เป็น องค์ประกอบผ้าใบ ควรใช้ SVG เมื่อมีวัตถุน้อยลงหรือมีพื้นที่ผิวมากขึ้น Canvas มีประสิทธิภาพที่สูงขึ้นเมื่อใช้กับพื้นผิวที่มีจำนวนวัตถุน้อยกว่าหรือเมื่อใช้กับวัตถุที่มีพื้นผิวที่ใหญ่กว่า

Canvas และ SVG เป็นทั้งเทคโนโลยี HTML5 ที่ช่วยให้สามารถสร้างกราฟิก รูปภาพ และรูปร่างได้ เนื่องจาก Canvas ถือเป็นคอนเทนเนอร์ จึงไม่สามารถสร้างภาพวาดใดๆ ใน Canvas ได้หากไม่มี JavaScript เราสร้างองค์ประกอบผ้าใบโดยใช้ getElementById() ในข้อมูลโค้ดด้านบน จากนั้นวาดรูปสี่เหลี่ยมบนผืนผ้าใบหลังจากใช้ getElementById() อีกครั้ง

กราฟิกในรูปแบบเวกเตอร์แสดงโดยมาตรฐาน SVG ในขณะที่กราฟิกในรูปแบบแรสเตอร์แสดงด้วยมาตรฐาน Canvas ทั้ง Canvas และ SVG ประกอบด้วยรูปร่างและพิกเซล ไม่สามารถอ่านวัตถุกราฟิกโดยใช้ SVG ซึ่งเป็นภาษาที่เข้าใจได้ง่าย แอป Canvas ใช้งานง่ายและเข้าใจง่าย เมื่อคุณใช้ SVG กับพื้นผิวที่ใหญ่ขึ้นหรือวัตถุน้อยลง การใช้งานจะง่ายขึ้น ผ้าใบทำงานได้ดีขึ้นเมื่อใช้กับพื้นผิวขนาดเล็กหรือวัตถุจำนวนมาก ไม่สามารถอ่านวัตถุกราฟิกได้เนื่องจากเป็นการยากที่จะเข้าใจไวยากรณ์ SVG ไวยากรณ์ของ Canvas นั้นง่ายต่อการเข้าใจและเข้าใจง่าย

Svg กับ ผ้าใบ

หากคุณชอบการนำเสนอเวกเตอร์แบบสแตติก sva เป็นทางออกที่ดีที่สุดของคุณ โหมดผ้าใบเปิดใช้งานใน HTML5

คุณสามารถ Render Svg ใน Canvas ได้ไหม

คุณสามารถ Render Svg ใน Canvas ได้ไหม
ถ่ายภาพโดย: https://imgur.com

ใช่ เป็นไปได้ที่จะแสดง SVG ในผืนผ้าใบ ซึ่งสามารถทำได้โดยใช้ไลบรารี เช่น canvg

ไลบรารีนี้ซึ่งช่วยให้คุณสามารถแปลงโหนด DOM ตามอำเภอใจให้เป็นภาพเวกเตอร์ (SVG) หรือแรสเตอร์ (PNG หรือ JPEG) โดยใช้ JavaScript ล้วนเป็นหนึ่งในไลบรารีที่ฉันใช้ เมื่อองค์ประกอบ DOM ส่งออกเป็น SVG คุณจะเปลี่ยนขนาดขององค์ประกอบ DOM ให้ตรงกับขนาดที่คุณต้องการได้ เช่น 3500x ซึ่งใหญ่กว่าขนาดเดิมของปุ่มมาก เราจะสาธิตวิธีใช้ JavaScript เพื่อเรนเดอร์ไฟล์ an.svg หรือ an.string เป็นรูปภาพในบทช่วยสอนนี้ ในการดึงข้อมูลธรรมดา เราจำเป็นต้องมี URL ข้อมูล คุณสามารถใช้ URL ข้อมูล SVG ที่คุณสร้างเป็นแหล่งที่มาขององค์ประกอบรูปภาพใน HTML เพื่อทดสอบความถูกต้อง เมื่อคุณเลือกผืนผ้าใบเปล่าแล้ว คุณสามารถใช้ผืนผ้าใบนั้นเพื่อแสดงภาพ SVG ด้วยขนาดที่กำหนดเอง จากนั้นส่งออกเป็น PNG หรือ JPEG ในตัวอย่างนี้ เราจะใช้ Wikipedia Tiger SVG เป็นจุดเริ่มต้น จากนั้นสร้างด้วยตนเองโดยจัดเก็บ SVG ไว้ในตัวแปรสตริงก่อนที่จะใช้รูปแบบ URL ข้อมูลเพื่อกำหนด URL ที่เข้ารหัส

Canvas ผลิตกราฟิกแบบเวกเตอร์หรือไม่

Canvas มีพื้นที่ผิวที่ใหญ่ขึ้นหรือวัตถุจำนวนมากขึ้นเพื่อประสิทธิภาพที่ดีขึ้น ในรูปแบบเวกเตอร์ รูปร่างของ SVG จะถูกทำให้เป็นเวกเตอร์ Canvas เป็นรูปแบบกราฟิกแบบแรสเตอร์ที่ใช้หน่วยพิกเซล

ทำไมต้องใช้ Svg Over Raster Graphics?

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


Svg ควรเป็นแบบอินไลน์หรือไม่

เนื่องจาก SVG แบบอินไลน์ถูกฝังอยู่ใน HTML จึงไม่จำเป็นต้องมีคำขอเครือข่ายอื่นเพื่อดึงไฟล์ SVG ดังนั้นจึงโหลดได้เร็วขึ้น สิ่งสำคัญคือต้องเข้าใจว่าในขณะที่คุณได้รับ FOUC (Flash of unstyled content) SVG แบบอินไลน์ของคุณจะอ้างอิงถึงแบบอักษรภายนอกด้วย

เนื่องจาก HTML อนุญาตให้คุณฝังกราฟิกได้ คุณจึงใช้วิธีการฝังได้หลายวิธี เมื่อฝังรูปภาพแล้ว รูปภาพเหล่านั้นจะไม่ถูกโหลดสำหรับแต่ละเอกสารที่ตามมาซึ่งมีรูปภาพเหล่านั้น สไตล์ชีตของเอกสาร HTML สามารถใช้เพื่อเพิ่มหรือลดรูปลักษณ์ของกราฟิกได้ ตัวอย่างเช่น สามารถกำหนดสีเติมและเส้นได้เช่นเดียวกับความแข็งแรงของเส้นและการแปลง ไฟล์ SVG ภายในมีข้อดีหลายประการเหนือไฟล์ภายนอกที่ฝังอยู่ ตัวอย่างเช่น หากคุณวาง SVG ไว้ในลิงก์และใช้ CSS คุณจะสามารถสร้างเอฟเฟ็กต์โฮเวอร์ได้ เนื่องจากแผนผังโหนด DOM ของเอกสาร HTML มี SVG ในตัว จึงสามารถเข้าถึงองค์ประกอบเดียวโดยใช้ CSS ได้ JavaScript ช่วยให้คุณสามารถทำสิ่งเดียวกันได้โดยไม่ยาก

ผ้าใบเป็น Svg

ผืนผ้าใบเป็นพื้นผิวการวาดภาพตามพิกเซล ซึ่งแต่ละพิกเซลสามารถตั้งค่าเป็นสีเฉพาะได้ Svg เป็นรูปแบบภาพแบบเวกเตอร์ ซึ่งแต่ละองค์ประกอบถูกกำหนดโดยชุดของพิกัด

โปรแกรม Scalable Vector Graphics (SVG) เป็นตัวย่อของ Scalable Vector Graphics องค์ประกอบ Canvas ซึ่งเป็นองค์ประกอบ HTML ใช้เพื่อสร้างกราฟิกบนหน้าเว็บ มาดูความแตกต่างระหว่างตัวเลือกยอดนิยมทั้งสองนี้ให้ละเอียดยิ่งขึ้น ความแตกต่างระหว่างอินโฟกราฟิกและตารางเปรียบเทียบยังกล่าวถึงในรายละเอียดอีกด้วย

ข้อดีของกราฟิกแบบเวกเตอร์ที่ปรับขนาดได้

รูปภาพในไฟล์ svg สามารถปรับขนาดได้โดยไม่สูญเสียคุณภาพของภาพ ในทางกลับกัน ภาพบนผืนผ้าใบเป็นบิตแมป ซึ่งหมายความว่าภาพประกอบด้วยพิกเซลและสามารถบิดเบี้ยวได้เมื่อลดขนาดภาพ

Canvas.todataurl Svg

Canvas.todataurl svg เป็นฟังก์ชันที่สามารถใช้เพื่อแปลงองค์ประกอบผ้าใบเป็นไฟล์ svg สิ่งนี้มีประโยชน์หากคุณต้องการบันทึกเนื้อหาขององค์ประกอบผ้าใบเป็นรูปภาพหรือถ้าคุณต้องการสร้างรูปภาพเวกเตอร์

ในบทความนี้ เราจะเรียนรู้วิธีวาด SVG ลงในผืนผ้าใบ แล้วดาวน์โหลดโดยใช้ JavaScript ในการกำหนดความกว้างและความสูงของ SVG เราสามารถใช้วิธีนี้ได้ วัตถุที่มีค่าด้านซ้าย ด้านบน ความกว้าง และความสูงจะถูกส่งกลับโดยใช้วิธีนี้ นี่คือกรอบขอบเขตสำหรับองค์ประกอบ ansvg หลังจากโหลดภาพแล้วเราสามารถวาดผืนผ้าใบได้ ในกรณีนี้ เราจะใช้ DataURL เพื่อแปลงผืนผ้าใบ เราต้องส่งสตริง base64 จาก dataURL ไปยัง dataURL เพื่อแสดงรูปภาพทั้งสองของเรา

นอกจากนี้ยังสามารถกำหนดคุณภาพของภาพได้โดยใช้ภาพ jpeg และ webp สำหรับการสร้าง zip เราสามารถใช้ไลบรารี JSZip หากคุณสังเกตเห็นข้อผิดพลาดใด ๆ โปรดแจ้งให้เราทราบ

วิธีใช้ Svg กับ Canvas

Canvas เป็นพื้นผิวการวาดภาพที่ทรงพลังซึ่งช่วยให้คุณสร้างกราฟิกและรูปภาพสำหรับเว็บไซต์ ผ้าใบและ รูปแบบภาพเวกเตอร์ยอดนิยม SVG สามารถรวมกันเพื่อสร้างภาพที่น่าทึ่ง ขั้นตอนแรกคือการใช้องค์ประกอบ HTML ขององค์ประกอบ "วัตถุแปลกปลอม" เพื่อวาด SVG ลงบนผืนผ้าใบ จากนั้นคุณต้องวาดภาพ SVG ลงในผืนผ้าใบ นอกจากนี้ ยังมีองค์ประกอบ rect> ที่สามารถใช้ในการวาดเส้น วงกลม สี่เหลี่ยมผืนผ้า และวัตถุเส้นทาง นอกเหนือจากองค์ประกอบ foreignObject> ในองค์ประกอบต่างประเทศ> มีองค์ประกอบภาพที่สามารถใช้ในการวาดภาพ นอกจากนี้ยังสามารถใช้องค์ประกอบ "พิกัด" เพื่อระบุพิกัดของศูนย์กลางภาพได้อีกด้วย องค์ประกอบวัตถุแปลกปลอม นอกจากองค์ประกอบวัตถุแปลกปลอมแล้ว ยังมีองค์ประกอบประเภทที่สามารถใช้เพื่อระบุประเภทรูปภาพได้ นอกจาก foreignobject> แล้ว ยังมีอีก 2 องค์ประกอบ ได้แก่ องค์ประกอบ awidth และ height ซึ่งสามารถใช้ระบุความสูงและความกว้างของรูปภาพได้ องค์ประกอบของออบเจกต์เช่นนี้ยังจำเป็นในการวาดภาพลงบนพื้นผิวการวาดอีกด้วย พารามิเตอร์ประเภทกำหนดองค์ประกอบของวัตถุแปลกปลอมด้วยเมธอด toDataURL> ที่ส่งคืน URL ข้อมูลที่มีการแสดงรูปภาพในรูปแบบที่ระบุ คุณสามารถระบุรูปแบบไฟล์และคุณภาพของภาพที่ต้องการได้ ข้อมูลจะถูกส่งออกเป็นรูปภาพหรือ PNG หากไม่ได้ระบุรูปแบบไฟล์เฉพาะหรือหากไม่มีการสนับสนุน วัตถุแปลกปลอมขององค์ประกอบนี้และเมธอด toDataURL ทำให้ง่ายต่อการสร้าง URL ข้อมูลที่มีรูปภาพที่คุณสร้างขึ้น