SVG to image
Mark Waddingham
mark at livecode.com
Sun Sep 16 13:26:56 EDT 2018
Perhaps the drawing library could do with 'CompileIcon' which does the wrapping as your code does and then compiles the resulting SVG XML.
In the interim - IIRC - there is an '_internal' command used in the drawing library which returns the bbox of an SVG path string which will allow you to compute width/height correctly.
Warmest Regards,
Mark.
Sent from my iPhone
> On 16 Sep 2018, at 17:50, hh via use-livecode <use-livecode at lists.runrev.com> wrote:
>
> Import the source of a SVG icon widget to a PNG file:
> +++++++++++++++++++++++++++++++++++++++++++++++++++++
>
> The iconPath of an SVG icon is path data only (could be used as
> "instructions" for a path in LCB).
>
> So try to write a wrapper around it to make it valid SSVG data.
>
> The problem is the bounding box of the path (the values for w
> and h), there is no info about and it's hard to estimate from all
> the control points of the path.
>
> I tried just now to do it this way (works here, tested several times):
>
> on mouseUp
> lock screen; lock messages
> put the iconPath of widget "SVG Icon" into path
> put 2048 into w -- estimate general width of the icons
> put 2048 into h -- estimate general height of the icons
> put merge(svgWrapper()) into t
> if there is no img "import" then create img "import"
> set text of img "import" to drawingSVGCompile(t)
> cropIt "import" --> because w and h may be too large
> set width of img "import" to 100 --> your target width
> set height of img "import" to 100 --> your target height
> set topleft of img "import" to 10,10
> end mouseUp
>
> function svgWrapper
> return "<?xml version=" "e& "1.0" "e& " encoding=" "e& "UTF-8" "e& "?>" &CR& \
> "<svg" &CR& \
> " xmlns:svg=" "e& "http://www.w3.org/2000/svg" "e& "" &CR& \
> " xmlns=" "e& "http://www.w3.org/2000/svg" "e& "" &CR& \
> " version=" "e& "1.0" "e& "" &CR& \
> " width=" "e& "[[w]]" "e& " height=" "e& "[[h]]" "e& "" &CR& \
> ">" &CR& \
> "<path d=" "e& "[[path]]" "e& " />" &CR& \
> "</svg>"end svgWrapper
>
> ## CROP image ft to its opaque pixels [-hh fecit 2018]
> ## from my stack SVGHandles89 of "Sample Stacks"
> on cropIt ft
> put the width of img ft into w
> put the height of img ft into h
> put the maskdata of img ft into mData
> put numToByte(0) into c0
> -- left and right transparency limits
> put w into cmin; put 1 into cmax
> repeat with i=0 to h-1
> put i*w into h1
> repeat with j=1 to cmin
> if byte h1+j of mData is not c0 then
> put j into cmin; exit repeat
> end if
> end repeat
> repeat with j=w down to max(cmax,cmin)
> if byte h1+j of mData is not c0 then
> put j into cmax; exit repeat
> end if
> end repeat
> end repeat
> put max(0,cmin-1) into cmin
> put max(1+cmin,min(w,1+cmax)) into cmax
> -- top and bottom transparency limits
> put h into rmin; put 1 into rmax
> repeat with j=cmin to cmax
> repeat with i=0 to rmin-1
> if byte i*w+j of mData is not c0 then
> put i into rmin; exit repeat
> end if
> end repeat
> repeat with i=h-1 down to max(rmax,rmin)
> if byte i*w+j of mData is not c0 then
> put i into rmax; exit repeat
> end if
> end repeat
> end repeat
> put max(0,rmin-1) into rmin
> put max(1+rmin,min(h,1+rmax)) into rmax
> --
> put the left of img ft into L; put the top of img ft into T
> crop img ft to L+cmin,T+rmin,L+cmax,T+rmax
> -- LC Bug: resizes instead of cropping when image has angle <> 0
> end cropIt
>
>
>
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
More information about the use-livecode
mailing list