开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 46|回复: 0
打印 上一主题 下一主题
收起左侧

[技术专题] 聊一聊svg矢量图转位图png,以及论坛的svg相关模块总结

[复制链接]
跳转到指定楼层
楼主
发表于 前天 17:58 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式   北京市北京市
矢量图和位图的特点和区别:
矢量图:由数学公式和几何特性构成,能够无损缩放,保持清晰度。主要用于需要高精度、可编辑性和高清缩放显示的图像。
常见矢量图格式:svg,dxf ,eps等
位图:由像素点组成,放大时会失去清晰度,出现马赛克现象。 常见的jpg(jpeg)、png、bmp、ico、tiff、webp都是由像素点组成的位图。
这两种图像格式各有优缺点,选择时应根据具体需求来决定使用哪种类型。
易语言恰巧是对矢量图支持不好,也就浏览框能显示svg,或者自行解析svg路径并绘画,当然这样很难,因为svg标准就好几百页,一般只能绘制简单路径。
这就不可避免使用第三方库和模块。
我测试了本论坛搜索到的所以svg库,现在我先总结一下论坛的模块或者库(按搜索顺序),并给出好用度评价(满分10)。
1.ICO_SVG_PNG图片互转实例https://125.confly.eu.org/forum.php?mod=viewthread&tid=14853223(作者: 菜鸟路过)
测试过几张svg图,很多图不支持,仅支持简单路径的,不支持设置输出图像尺寸,带一个dll,不知道封装的是什么,目测像是自行解析的,大图会崩。
好用度:1
2.svg转png模块,支持透明背景,支持缩放,应该支持多线程https://125.confly.eu.org/forum.php?mod=viewthread&tid=14844082(作者: 李商隐2,也就是我本人)
这个是我以前找svg转png时候偶然发现的,是论坛gdi内存画板的一个命令,我单独拿出来了,后来通过审查这个gdi画板源码,发现也是自行解析的xml(svg本质就是xml文档)。
比上一个好用点,速度也快些,能控制缩放图像,硬伤还是由于自行解析所以支持的svg标准少,很多图像绘制不全。
好用度:1.5(原版gdi内存画板模块给2分)
3.SVG绘制验证码读取到画板https://125.confly.eu.org/forum.php?mod=viewthread&tid=14057674(作者: 猥琐小胖子)
自行解析,有源码,缺点一样,自行解析支持的svg标准很少。
好用度:1
4.svg图片转换 https://125.confly.eu.org/forum.php?mod=viewthread&tid=14331959 (作者: 方得)
自行解析,有源码,缺点一样,自行解析支持的svg标准少。
好用度:1

5.一种很抽象的.svg文件转.png文件 https://125.confly.eu.org/forum.php?mod=viewthread&tid=14834660 (作者: 憨憨问号)
使用浏览框显示,然后截图或者手动导出,支持的svg标准是多了,几乎所有都支持了,ie浏览器支持什么,它就支持什么,当然这是ie浏览器的功劳,不过这种方法操作略显繁琐,也很难做到多线程并发,毕竟要窗口被前台渲染了才能截图,不是一种正路。
好用度:1.5

6.svg转png用Java实现 https://125.confly.eu.org/forum.php?mod=viewthread&tid=14797568 (作者: xinxie)
用java写的,然后起了个http服务,易语言通过网络接口调用,支持的svg标准也很全面,并发性能也不错,目前没找到转不出来或显示不全的svg图,缺点很明显,要么安装java运行时,要么打包成exe,然后易语言每次要带上这个exe。
好用度:1.5
7.SVG转PNG https://125.confly.eu.org/forum.php?mod=viewthread&tid=14682180 (作者: Ossian)
这个重点讲解,这个是个人认为目前论坛最好用的,我手上有一个svg,是个公式内容,论坛只有这一个能正常显示(除了5.使用ie浏览框和6.使用java的那个),svg内容如下
[XML] 纯文本查看 复制代码
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="40.358ex" height="5.07ex" viewBox="0 -1402.6 17376.2 2182.7" role="img" focusable="false" style="vertical-align: -1.812ex;" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="matrix(1 0 0 -1 0 0)"><path stroke-width="1" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z"></path><path stroke-width="1" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(394,0)"></path><path stroke-width="1" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(673,0)"></path><g transform="translate(1396,0)"><path stroke-width="1" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z"></path></g><g transform="translate(1925,0)"><path stroke-width="1" d="M56 320T56 333T70 353H369V502Q369 651 371 655Q376 666 388 666Q402 666 405 654T409 596V500V353H707Q722 345 722 333Q722 320 707 313H409V40H707Q722 32 722 20T707 0H70Q56 7 56 20T70 40H369V313H70Q56 320 56 333Z"></path></g><g transform="translate(2870,0)"><path stroke-width="1" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z"></path><path stroke-width="1" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(394,0)"></path><path stroke-width="1" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(673,0)"></path></g><g transform="translate(4267,0)"><path stroke-width="1" d="M29 -194Q23 -188 23 -186Q23 -183 102 134T186 465Q208 533 243 584T309 658Q365 705 429 705H431Q493 705 533 667T573 570Q573 465 469 396L482 383Q533 332 533 252Q533 139 448 65T257 -10Q227 -10 203 -2T165 17T143 40T131 59T126 65L62 -188Q60 -194 42 -194H29ZM353 431Q392 431 427 419L432 422Q436 426 439 429T449 439T461 453T472 471T484 495T493 524T501 560Q503 569 503 593Q503 611 502 616Q487 667 426 667Q384 667 347 643T286 582T247 514T224 455Q219 439 186 308T152 168Q151 163 151 147Q151 99 173 68Q204 26 260 26Q302 26 349 51T425 137Q441 171 449 214T457 279Q457 337 422 372Q380 358 347 358H337Q258 358 258 389Q258 396 261 403Q275 431 353 431Z"></path></g><g transform="translate(5111,0)"><path stroke-width="1" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path></g><g transform="translate(6167,0)"><path stroke-width="1" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path></g><g transform="translate(6834,0)"><path stroke-width="1" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z"></path><path stroke-width="1" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(394,0)"></path><path stroke-width="1" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(673,0)"></path></g><g transform="translate(8230,0)"><g transform="translate(120,0)"><rect stroke="none" width="620" height="60" x="0" y="220"></rect><g transform="translate(60,676)"><path stroke-width="1" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path></g><g transform="translate(60,-686)"><path stroke-width="1" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path></g></g><g transform="translate(860,0)"><path stroke-width="1" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path><g transform="translate(389,0)"><path stroke-width="1" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z"></path><g transform="translate(529,0)"><path stroke-width="1" d="M56 320T56 333T70 353H369V502Q369 651 371 655Q376 666 388 666Q402 666 405 654T409 596V500V353H707Q722 345 722 333Q722 320 707 313H409V40H707Q722 32 722 20T707 0H70Q56 7 56 20T70 40H369V313H70Q56 320 56 333Z"></path></g><g transform="translate(1308,0)"><path stroke-width="1" d="M29 -194Q23 -188 23 -186Q23 -183 102 134T186 465Q208 533 243 584T309 658Q365 705 429 705H431Q493 705 533 667T573 570Q573 465 469 396L482 383Q533 332 533 252Q533 139 448 65T257 -10Q227 -10 203 -2T165 17T143 40T131 59T126 65L62 -188Q60 -194 42 -194H29ZM353 431Q392 431 427 419L432 422Q436 426 439 429T449 439T461 453T472 471T484 495T493 524T501 560Q503 569 503 593Q503 611 502 616Q487 667 426 667Q384 667 347 643T286 582T247 514T224 455Q219 439 186 308T152 168Q151 163 151 147Q151 99 173 68Q204 26 260 26Q302 26 349 51T425 137Q441 171 449 214T457 279Q457 337 422 372Q380 358 347 358H337Q258 358 258 389Q258 396 261 403Q275 431 353 431Z"></path></g></g><g transform="translate(2264,0)"><path stroke-width="1" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g></g></g><g transform="translate(11911,0)"><path stroke-width="1" d="M370 305T349 305T313 320T297 358Q297 381 312 396Q317 401 317 402T307 404Q281 408 258 408Q209 408 178 376Q131 329 131 219Q131 137 162 90Q203 29 272 29Q313 29 338 55T374 117Q376 125 379 127T395 129H409Q415 123 415 120Q415 116 411 104T395 71T366 33T318 2T249 -11Q163 -11 99 53T34 214Q34 318 99 383T250 448T370 421T404 357Q404 334 387 320Z"></path><path stroke-width="1" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(444,0)"></path><path stroke-width="1" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(945,0)"></path></g><g transform="translate(13417,0)"><g transform="translate(120,0)"><rect stroke="none" width="620" height="60" x="0" y="220"></rect><g transform="translate(60,676)"><path stroke-width="1" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path></g><g transform="translate(60,-686)"><path stroke-width="1" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path></g></g><g transform="translate(860,0)"><path stroke-width="1" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path><g transform="translate(389,0)"><path stroke-width="1" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z"></path><g transform="translate(751,0)"><path stroke-width="1" d="M56 467T56 480T70 500H707Q722 492 722 480T707 460H409V187H707Q722 179 722 167Q722 154 707 147H409V0V-93Q409 -144 406 -155T389 -166Q376 -166 372 -155T368 -105Q368 -96 368 -62T369 -2V147H70Q56 154 56 167T70 187H369V460H70Q56 467 56 480Z"></path></g><g transform="translate(1752,0)"><path stroke-width="1" d="M29 -194Q23 -188 23 -186Q23 -183 102 134T186 465Q208 533 243 584T309 658Q365 705 429 705H431Q493 705 533 667T573 570Q573 465 469 396L482 383Q533 332 533 252Q533 139 448 65T257 -10Q227 -10 203 -2T165 17T143 40T131 59T126 65L62 -188Q60 -194 42 -194H29ZM353 431Q392 431 427 419L432 422Q436 426 439 429T449 439T461 453T472 471T484 495T493 524T501 560Q503 569 503 593Q503 611 502 616Q487 667 426 667Q384 667 347 643T286 582T247 514T224 455Q219 439 186 308T152 168Q151 163 151 147Q151 99 173 68Q204 26 260 26Q302 26 349 51T425 137Q441 171 449 214T457 279Q457 337 422 372Q380 358 347 358H337Q258 358 258 389Q258 396 261 403Q275 431 353 431Z"></path></g></g><g transform="translate(2708,0)"><path stroke-width="1" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g></g></g></g></svg>

这个作者说是在github找了一个库,然后封装的,虽然不知道这个作者封装的是什么库,据猜测应该是libsvg,因为我也想自行封装一个库,在github找了很久,用c++调用了libsvg这个库,发现生成的png图像效果一样,有一个特点就是使用这个库转换上面这个公式的svg图像,输出的图片尺寸巨大,且不能自定义输出尺寸,导出多大就是多大,这样输出png巨慢,且资源浪费。而且根据论坛其他人发的评论,该库还有其它缺点:kflizcst评论道:
"这个SVG转PNG模块有功能缺陷,缺少一些很重要的功能导致实用性不佳,主要的问题:
1、缺少对文本的支持,包含文本内容的SVG无法将文本内容转换到图片会丢失掉文字内容。
2、不支持嵌入位图的SVG,如果SVG图像中嵌入了位图图片,转换的时候也会丢失掉无法转换。
3、不知道是不是楼主封装的问题,估计是为了支持易语言调用封装为了32位的DLL,导致对于内容超大的SVG图像(例如30MB大小,矢量元素很多)无法转换,会出现转换失败问题。
github上的SVG项目大部分都已经半死不活很久不更新了,对SVG标准的支持也非常有限(我目前就没看到一个能完整支持SVG1.1主要特性的),目前还算活跃的就只有一个,然而这个目前也不支持文本,位图嵌入等重要特性,联系过作者,作者说目前还在努力完善,只能说希望尽快完善堪用吧。”

该评论第1、2、3条我都同意,不过github上还是有好的全面支持SVG标准的库的,这里说下svg标准,诞生于1999年,2003 年发布是 1.1 版,成为 W3C 推荐标准,1.1是各种主流系统或软件广泛支持的,是流行最广泛的, SVG1.2 引入了动图,但是svg动图几乎没有软件支持 ,后面又发布 SVG2.0,兼容前面版本,但是对于2.0版本中的新特性,也没多少软件支持。因此,只要完整支持SVG1.1特性,就能打开市面上99.9%的svg图像。
好吧,回归正题, Ossian封装的库因为不是自行解析,引用了github上的库,比自行解析的好太多。好用度:2.5。
接下来我就要说一说,我也封装了github上的一个svg库,“resvg”,我重点说一下resvg库:(有些文字是翻译的,请各位见谅。)
resvg 是 Rust 写的,核心思想是创建一个快速、小巧、便携的SVG库,目标是支持整个SVG规范。
SVG 是一个非常复杂的格式,具有庞大的规范(SVG 1.1 几乎有 900 页)。 基本上你需要一个网页浏览器来处理所有这些内容。然而事实是,即使浏览器 在这方面的表现也常常失败(见 SVG 支持)。 是的,与 resvg不同,浏览器确实支持动态 SVG 功能,如动画和脚本。 但使用浏览器来正确渲染 SVG 是可悲的,这不是一个选项。为了证明其正确性,resvg有一个庞大的测试套件,包括大约1600个测试。 这些测试只是SVG到PNG的回归测试。这不包括resvg依赖项中的测试。 最好的事情是resvg测试套件对每个人都是可用的。它没有任何resvg 的捆绑。这应该有助于计划开发自己SVG库的人。然而 resvg不是唯一用Rust编写的SVG库,但它是唯一完全用Rust编写的库。最终二进制文件中没有非Rust代码。此外,几乎没有unsafe代码。同样,一些依赖项有一些unsafe代码unsafe,并且字体内存映射本质上是,但在内存安全性方面,这是你能得到的最佳方案。然而,这不仅仅是关于内存安全。resvg 它有广泛的检查来防止无尽的循环(冻结)和堆栈溢出(通过递归)。目前,resvg CLI应用程序的大小不到3MB,不需要任何外部依赖。 二进制文件中包含的任何内容都是渲染SVG文件所必需的。性能:在不同的SVG渲染库之间比较性能就像比较苹果和橙子。 每个库支持的功能、语言、构建标志等都大不相同。 不管怎样,resvg是用Rust写的,并且使用了tiny-skia进行渲染 - 它的速度相当快。 应该还有很大的改进空间。可重复性:由于 resvg 不依赖于任何系统库,因此它允许我们在所有支持的平台上获得可重复的结果。这意味着如果您在 x86 Windows 上渲染一个 SVG 文件,然后在 ARM macOS 上渲染它,生成的图像将是相同的。每个像素的值将是相同的。
局限性:没有动画,也没有计划去实现它们。SVG 2 支持正在开发中。 您可以通过 svg2 标签 或我们的 SVG 2 更新日志 搜索相关问题。SVG Tiny 1.2 不被支持,也不计划提供支持。

他们对github上好用的库都测试了,效果如下图:
横轴代表的是对svg标准特性的支持程度,resvg是支持最多的(除了动图)甚至比浏览器支持的都多,他们对于这个图的评论是:
“您可以在此处找到完整的支持功能表 这里。 它还包含一些替代库。我们不测试所有SVG库,因为其中很多库都相当糟糕。 一些库没有出现在列表中,因为它们没有通过25%的测试。 这些库包括:wxSvg、LunaSVG和nanosvg。”
注意librsvg和libsvg不是一个库(名称区别是多了个r),librsvg是rust写的,在浏览器搜c++可以调用的svg库,一般推荐的是这个,但是貌似新版支持不了易语言的32位了。上面7.那个Ossian老哥感觉封装的是libsvg,libsvg是librsvg前身是c或c++写的。
好了,既然笔锋至此,是时候放出来我基于resvg封装的易语言模块了,命令简单就一条,可以指定导出的png图尺寸,svg是矢量的嘛,你想导出多大都不会模糊失真,你如果不知道你的svg的宽高比例的话,可能导出的图片会被拉伸,不过你可以只指定导出图像的宽度或者高度,另一个为空,这样会自动计算另一个数值,确保图片的宽高比例正常。要是图像输出宽度或者高度两个参数都为空,则输出图像的尺寸为svg画布的尺寸。这样的话你想输出多大的图就多大,Ossian老哥的是:如果你svg画布小,导出的图就小,然后你想要大点尺寸的,只能去缩放导出的png,就会模糊,相反,如果你svg画布大,导出的图就大(例如svg画布是4000×3000),耗时长(可能好几秒甚至数十秒),然后你不想要大尺寸的(只显示在640×480窗口),这及其浪费时间。我封装的这个是你输入尺寸多大,计算机就只渲染这么大的尺寸的图,因此不浪费计算机性能。
此外,我还解决了Ossian老哥的不能加载文字的缺点,能加载系统文字,系统里面没有的不行,当然这是我封装的问题,原版resvg能指定字体文件和网络字体加载,有能力的去自行封装吧,系统字体应该够用了,实在不行使用易语言代码先安装字体。kflizcst评论Ossian的第二条,svg里面嵌入位图问题,resvg理论支持这样的svg图像,不过我没有找到这样的图做测试。大文件问题应该没有,易语言能申请多大内存,按说就能转多大的,多线程我没有测试,理论上能支持(rust原版肯定支持),因为我封装的时候没有使用公共资源,应该不会出现冲突,希望大家可以测试。


resvg几乎没有缺点,但是作为易语言模块还是有点小遗憾,resvg原生不会导出png数据,resvg原版是将svg渲染(导出)为RGBA数据(在内存里面的一系列的RGBA像素数值的集合,是一种原始像素数据),而png是一种压缩格式,因此对于resvg渲染(导出)的RGBA数据要做一步转换,所以我不得不把它放进了我封装的图像处理模块里面(基于opencv),resvg本身的dll其实就2.3mb。其实,如果不导出png,而是导出bmp,就不需要借助opencv或者别的,bmp文件内部就是原始无压缩的RGBA数据,但是透明通道就会损失,导出png可以保留透明通道。
经过易语言测试,在i5—12490F处理器上,使用示例svg渲染500×500的png图像8ms左右,我封装的命令调用及其简单:
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
__启动窗口_创建完毕  

子程序名返回值类型公开备 注
_按钮1_被单击  
变量名类 型静态数组备 注
p字节集 
t整数型 
p = #示例svg  ' 或者使用“读入文件()”命令自行读入svg图像数据' p = 读入文件 (“C:\Users\Administrator\Desktop\input.svg”)
图片框1.图片 = 图像_svg转png (p, 图片框1.宽度, 图片框1.高度)



最后,我把模块和示例都放在夸克网盘了(因为加入了个项目,资源被转存一次可以获得0.3元收益),觉得这篇文章好的,真正需要这个模块的,不妨下载一下,毕竟只需要动动手多点几下。
链接:https://pan.quark.cn/s/8bc457cdc9f0




您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表