Show HN: Ascii to SVG
ivanceras.github.io
ivanceras.github.io
Source: https://github.com/sigvef/arktis/blob/master/index.sigvehtml
Rendered website: http://arkt.is/
I wondered how it figured out to use the elephant JPEG from the ASCII art. Well:
def educated_guess_at_image():
return 'http://pensivetoaster.com/wp-content/uploads/2013/05/elephant-banner.jpg'
(https://github.com/sigvef/sigvehtml/blob/e2cfa586f43aacbb374...)Very xkcd 221.
(You can have a hint at this behaviour because some pixel are "more black" when an area is covered by two SVG elements)
edit: killercup as made a similar comment with answer from the author, https://news.ycombinator.com/item?id=12621863
because some pixel are "more black" when an area is covered by two SVG elements
How can you possibly see that? This definitely needs a lot of more work on adding optimizer to reduce the elements into simplest form possible. Right now, this is just trying to put into screen what should it look like, it would be nice to have a more simplified SVG version up to primitive levels such as rect, circle, etc. How can you possibly see that?
Short answer : I'm writing a drawing software and I've become pixel sensitive.Technical answer : you are creating 1 pixel wide horizontal/vertical line with integer coordinates. Sadly in SVG this mean you writing your line between two pixel lines. So you don't write 1 black pixel but two semi-transparent black pixels. On white background the result is two RGB(127,127,127) pixels.
When two line overlaps you write semi-transparent black pixel twice and you end with two RGB(191,191,191) pixels.
You can hide this behaviour by shifting everything by 0.5 or using a retina display.
Any HiDPI display will work, not just Apple's. Shifting by 0.5 in both directions is a quick win though.
^^^ SO IMPORTANT. I returned to working with SVG seriously for a project last year, and was bitten by pixel-alignment rendering behavior along these lines. This was frustrating, as it was completely hidden during initial development by the fact that I was working on a retina-class display. On low-dpi, the rendering artifacts were quite noticeable. Compounding matters, the specifics varied by the SVG renderer (web browser) in use which also made it harder to identify the worst problem cases. Fortunately, it was noticed by an internal, design-sensitive user first!
This is equivalent to wrapping every character of your website's text in a div, precisely positioning it - at a large enough scale, or with a dynamic page, it's just eventually going to cause performance issues or even lock-ups.
This gets rid of the "more black" problem, but you lose the antialiasing effect which makes shapes with curves look horrible. Could try and apply it to only straight lines I suppose?
┏━━━━━━━━━━━┓ ┏━━━━━━━┓
┃ Like this ┣━━┫ Box ┃
┗━━━━━━━━━━━┛ ┗━━━━━━━┛
It's an easy transformation. You only have to look at 3 lines at a time, and then only at 3x3 blocks of characters. This would be a fun
transformation to put in a text editor.The line drawing characters in Unicode (and originally on the DEC VT100) aren't expressive enough. They lack arrows and round corners. With SVG, you can do more.
There are a lot of people who just can't use a draw program. Not sure why. I use Inkscape for this sort of thing, or sometimes LibreOffice Draw.
[1] http://ditaa.sourceforge.net/ [2] http://orgmode.org/worg/org-contrib/babel/languages/ob-doc-d...
BTW, a related project of mine to create mind maps in the browser: https://josetomastocino.github.io/mindmapit/
It seems to not recognize shapes and instead renders them using a bunch of lines, though (just like in the ASCII version). This is visible, at least in Safari 10.
https://github.com/ocodo/.emacs.d/blob/master/plugins/ibm-bo...
2. Use Ascii to SVG
The SVG version looks amazing! Great work!
Is there any way to easily "download" the result or do I just copy paste the code into a file?
I was able to use chrome "developer mode" to inspect the rendered svg tag and copy the element into a file named miniuri.svg
Inkscape is happy to load it up! I think providing a "download" button would be useful though.
Source code: https://github.com/ivanceras/elm-examples/tree/master/elm-bo...
It could also serve as part of the markup input language in a system like asciidoc. The benefit is that the source resembles the output.
In this man page, I have lots of occurrences of
<-->
http://www.nongnu.org/txr/txr-manpage.htmlin verbatim code which could be turned into a nicer arrow.
Also, textual diagrams occur:
In a HTML rendering, references to exotic fonts are pretty much a nonstarter, unless you include them in the page.
+----+
|test|
+----+
+------+
| test +-->
+------+Also make the divider draggable.
Nice work!
[1] https://monodraw.helftone.com
[2] https://blog.helftone.com/monodraw-snippets-update-sneak-pee...
[3] https://blog.helftone.com/monodraw-snippets-update-released/
WW WW WW HH HH YY YY ??
WW WW WW HH HH YY YY ?? ??
WW WW WW HHHHHHHHH YY YY ??
WW WW WW HH HH YYYY ??
WWWWW HH HH YY ??
WWW HH HH YY ??