{"id":104,"date":"2018-10-29T19:35:11","date_gmt":"2018-10-29T19:35:11","guid":{"rendered":"https:\/\/stuff.tamius.net\/sacred-texts\/?p=104"},"modified":"2019-11-23T20:20:29","modified_gmt":"2019-11-23T20:20:29","slug":"how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1","status":"publish","type":"post","link":"https:\/\/stuff.tamius.net\/sacred-texts\/2018\/10\/29\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\/","title":{"rendered":"How to make speech bubbles draw themselves: a story of pain (part 1)"},"content":{"rendered":"<p>Every now and then, I sit down in front of my computer and start making <a href=\"https:\/\/httydnd.tamius.net\/latest\">a comic<\/a>. It follows a very similar premise to <a href=\"https:\/\/www.shamusyoung.com\/twentysidedtale\/?cat=14\">DM of the Rings<\/a> and <a href=\"http:\/\/darthsanddroids.net\/\">Darths&amp;Droids<\/a> \u2014 that is, take a movie (in my case, How To Train Your Dragon) and pretend it&#8217;s a D&amp;D session \u2014 except my work is much less original and not that good, probably. Oh well.<\/p>\n<p>If you&#8217;re making any sort of comics, you&#8217;ll probably have to draw a ton of speech bubbles. Mind, drawing basic speech bubbles isn&#8217;t that hard: you use the oval selection tool, select an area and fill it with color. But boy does it take time. The more of them, the longer it takes \u2014 and boy do some pages feature a lot of them.<\/p>\n<figure id=\"attachment_106\" aria-describedby=\"caption-attachment-106\" style=\"width: 566px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-106\" src=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2018\/10\/67-e1539797626358.jpg\" alt=\"\" width=\"566\" height=\"800\"><figcaption id=\"caption-attachment-106\" class=\"wp-caption-text\">Just to illustrate how bad it can get. Now admittedly an episode normally won&#8217;t have this many bubbles, but that doesn&#8217;t mean drawing speech bubbles isn&#8217;t a colossal waste of time.<\/figcaption><\/figure>\n<p>Because we like to work smarter, not harder, the question pops up: why don&#8217;t we make a script that would draw speech bublbes for us? I&#8217;m using GIMP anyway, and GIMP has plugin support. \u2018\u2018This shouldn&#8217;t be too hard,\u2019\u2019 were the famous last words as I opened visual studio code on that day about two weeks ago and got to work.<\/p>\n<h1>Drawing rectangles is easy. Drawing ellipses is hard.<\/h1>\n<p>Comics often use two kinds of bubbles: there&#8217;s bubbles used for narration, which are often rectangular; and there&#8217;s bubbles used for speech, which are generally elliptical (more or less).<\/p>\n<h2>Determining borders<\/h2>\n<p>If we want to draw any kind of bubble (be it rectangular or elliptical), we must first figure out where to place it. This is the easy part, because:<\/p>\n<ol>\n<li>we use GIMP and put the text for each bubble on its own, separate, transparent layer. That&#8217;s one of the important assumptions that we&#8217;ll make (especially for elliptical bubbles): we <em>don&#8217;t<\/em> reuse text layers for more than one bubble, and the layer is always transparent except for text.<\/li>\n<li>images and layers are, in general, grids of squares (pixels), where each square is colored with a different color. This allows us to borrow some tricks from <a href=\"https:\/\/github.com\/xternal7\/ultrawidify\" target=\"_blank\" rel=\"noopener noreferrer\">Ultrawidify<\/a>: we&#8217;ll check every pixel of every row, and every pixel of every column for the presence of non-transparent pixels.<\/li>\n<\/ol>\n<p>If we keep track of where the first non-transparent pixel was found for every row and column, we can figure out where the text starts and where it ends. If rows of text don&#8217;t overlap each other, we get the bounds of <em>every<\/em> row of text in the layer. And when we know that a row of text starts at line 32, ends at line 64, starts at column 3 and ends at column 125. That gives us 4 corner points per line of text, and that&#8217;s enough data to draw a rectangle. The vertices are at 3, 32; 125, 32; 3, 64; 125, 64. The procedure is so simple it doesn&#8217;t even deserve its own heading (although there is a few minor, seemingly simple improvements you can make to that). At least compared to what&#8217;s about to come.<\/p>\n<h2>Ellipses can honestly piss off<\/h2>\n<h3>Do we even know what we&#8217;re trying to do?<\/h3>\n<p>Yes, actually. We want to draw an ellipse around a set of points, where:<\/p>\n<ol>\n<li>All the corner points must be inside or on the edge of said ellipse<\/li>\n<li>Points must be as close to ellipse edge as possible<\/li>\n<\/ol>\n<p>In order to draw an ellise, we need to know:<\/p>\n<ul>\n<li>width and height of the ellipse<\/li>\n<li>center of the ellipse (or more accurately, upper left corner\u00b9, but we can get that from width and height of the ellipse)<\/li>\n<\/ul>\n<p><small>\u00b9In computer graphics, the coordinate system is flipped over horizontal axis compared to the coordinate system used most everywhere else.<\/small><\/p>\n<p>because those are the parameters GIMP&#8217;s ellipse selection tool takes. We already know the points that represent the edges of text. What we need to do is to take those points (bunch of pairs of x,y coordinates) and somehow convert that to parameters of the ellipse that will satisfy the two rules outlined above.<\/p>\n<p>Computers are very good at two things: logic and maths. This means we need to tell it how to calculate the center, width and height from those points. Because I don&#8217;t recall that lesson from my math classes, I went to every programmer&#8217;s best friend (stackoverflow) and discovered that \u2014 spoiler alert \u2014 this is either a) more or less impossible or b) requires diploma or master&#8217;s degree in maths.<\/p>\n<p>I studied computer science. We had maths, but not that kind of maths.<\/p>\n<h3>Time to cheat<\/h3>\n<p>First of all, we subtly change our second requirement. We don&#8217;t require that the corner points are as close to the edge of the ellipse anymore, instead we focus on trying to draw the smallest ellipse possible. It&#8217;s less than ideal, but we&#8217;ll have to live with that.<\/p>\n<figure id=\"attachment_111\" aria-describedby=\"caption-attachment-111\" style=\"width: 1020px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-111\" src=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2018\/10\/Screenshot_20181023_221249.png\" alt=\"\" width=\"1020\" height=\"265\" srcset=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2018\/10\/Screenshot_20181023_221249.png 1020w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2018\/10\/Screenshot_20181023_221249-300x78.png 300w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2018\/10\/Screenshot_20181023_221249-768x200.png 768w\" sizes=\"auto, (max-width: 1020px) 100vw, 1020px\" \/><figcaption id=\"caption-attachment-111\" class=\"wp-caption-text\">It&#8217;s a subtle difference that only matters in edge cases like this. &#8216;Points as close to the edge as possible&#8217; will give us a bigger ellipse overall, which is sometimes desired (if the upper portion of the speech bubble were to be covered with something). &#8216;Smallest ellipse&#8217; produces lots of wasted space around the bottom line.<br \/>Dots serve as a rough illustration of what the script would consider to be a corner point of the text.<\/figcaption><\/figure>\n<p>After we&#8217;re done revising our requirements, we head back to google and look up the equations for the ellipse.<\/p>\n<div class=\"center\"><i>x = a * cos(t)<br \/>\ny = b * sin(t)<\/i><\/div>\n<p>Where <em>x, y<\/em> are coordinates of a point on the ellipse; <em>a, b<\/em> are the length of the primary and secondary radii. We can do something with this. We can calculate where the center of ellipse will be. We just calculate where the middle point of every opposing pair of corner points is (e.g. the opposite point of upper left point in the top line of text is the lower right point in the bottom row of text). Since each pair of corner points may give a slightly different center, we take the average of those centers. Now that we know where the center is, we can use some high school maths to calculate the angle between straight line from center to a given point and the horizontal axis, and we do that for every point. Biggest ellipse will contain all the points, and we will have our answer.<\/p>\n<p><b>Except <i>t<\/i> is not the angle to our point.<\/b> <i>t<\/i>is the angle between horizontal axis and the point where our point would be, if the ellipse was squished (or stretched) into a circle. We can squish (or stretch) ellipse into a circle by multiplying (or dividing) one of the coordinates with the aspect ratio of the ellipse.<\/p>\n<p>Do we know the aspect ratio of the ellipse? No.<\/p>\n<p>We know the topmost point of the top line of text, we know bottommost point of the bottom line of text, we know leftmost and rightmost point of the longest line of text. We can get width and height from that. We can use that to calculate an aspect ratio.<\/p>\n<p>Is that aspect ratio the same as the aspect ratio of the ellipse we want? Tests concluded that no. This is not the aspect ratio we&#8217;re looking for. Our final result looks something like this:<\/p>\n<figure id=\"attachment_114\" aria-describedby=\"caption-attachment-114\" style=\"width: 1909px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-114\" title=\"\" src=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2018\/10\/Screenshot_20181025_204929.png\" alt=\"\" width=\"1909\" height=\"703\" srcset=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2018\/10\/Screenshot_20181025_204929.png 1909w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2018\/10\/Screenshot_20181025_204929-300x110.png 300w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2018\/10\/Screenshot_20181025_204929-768x283.png 768w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2018\/10\/Screenshot_20181025_204929-1024x377.png 1024w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2018\/10\/Screenshot_20181025_204929-1200x442.png 1200w\" sizes=\"auto, (max-width: 1909px) 100vw, 1909px\" \/><figcaption id=\"caption-attachment-114\" class=\"wp-caption-text\">White ellipse is what the script did. The selection has same dimensions than ellipse, but is placed roughly where the ellipse is supposed to be. Red lines represent what our script considers to be a line of text.<br \/>Red line should be entirely within the ellipse (with at least 3 pixels to spare in the vertical direction, and 7 pixels to spare in horizontal). But the red seems to poke out for some reason.<br \/>And not only does the ellipse fail to contain the lines completely, it&#8217;s also offset to the left and a little bit to the right.<\/figcaption><\/figure>\n<p>Can we fix the aspect ratio with some brute force? I could write another paragraph on how this was attempted, but long story short: turns out we can&#8217;t. We&#8217;d need more data to draw the ellipse we want.<\/p>\n<div style=\"position:relative; padding-bottom:calc(56.25% + 44px)\"><iframe loading=\"lazy\" src=\"https:\/\/gfycat.com\/ifr\/TheseLeftHornedtoad\" scrolling=\"no\" style=\"position:absolute;top:0;left:0;\" allowfullscreen=\"\" width=\"100%\" height=\"100%\" frameborder=\"0\"><\/iframe><\/div>\n<p><small>Oddshot with sound <a href=\"https:\/\/www.youtube.com\/watch?v=JrsWjIx2b4s\" target=\"_blank\" rel=\"noopener noreferrer\">here<\/a>.<\/small><\/p>\n<p>Bummer. Turns out cheating doesn&#8217;t pay (yet). I guess we&#8217;ll have to do things the proper way\u2122.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Every now and then, I sit down in front of my computer and start making a comic. It follows a very similar premise to DM of the Rings and Darths&amp;Droids \u2014 that is, take a movie (in my case, How To Train Your Dragon) and pretend it&#8217;s a D&amp;D session \u2014 except my work is much less original and not that good, probably. Oh<span class=\"more-dots\">&#8230;<\/span> <span class=\"more-tag d-block mt-05\"><a class=\"more-link\" href=\"https:\/\/stuff.tamius.net\/sacred-texts\/2018\/10\/29\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\/\">Continue Reading...<span class=\"screen-reader-text\"> \"How to make speech bubbles draw themselves: a story of pain (part 1)\"<\/span><\/a><\/span><!-- .more-tag --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[14,13],"tags":[],"class_list":["post-104","post","type-post","status-publish","format-standard","hentry","category-gimp","category-programming","no-post-thumbnail"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to make speech bubbles draw themselves: a story of pain (part 1) - Tamius&#039; sacred texts<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/stuff.tamius.net\/sacred-texts\/2018\/10\/29\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to make speech bubbles draw themselves: a story of pain (part 1) - Tamius&#039; sacred texts\" \/>\n<meta property=\"og:description\" content=\"Every now and then, I sit down in front of my computer and start making a comic. It follows a very similar premise to DM of the Rings and Darths&amp;Droids \u2014 that is, take a movie (in my case, How To Train Your Dragon) and pretend it&#8217;s a D&amp;D session \u2014 except my work is much less original and not that good, probably. Oh...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/stuff.tamius.net\/sacred-texts\/2018\/10\/29\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Tamius&#039; sacred texts\" \/>\n<meta property=\"article:published_time\" content=\"2018-10-29T19:35:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-11-23T20:20:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2018\/10\/67-e1539797626358.jpg\" \/>\n<meta name=\"author\" content=\"Tamius Han\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tamius Han\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2018\\\/10\\\/29\\\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2018\\\/10\\\/29\\\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\\\/\"},\"author\":{\"name\":\"Tamius Han\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/#\\\/schema\\\/person\\\/4677d05a4f45974f27cd21481c561c21\"},\"headline\":\"How to make speech bubbles draw themselves: a story of pain (part 1)\",\"datePublished\":\"2018-10-29T19:35:11+00:00\",\"dateModified\":\"2019-11-23T20:20:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2018\\\/10\\\/29\\\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\\\/\"},\"wordCount\":1438,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2018\\\/10\\\/29\\\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/wp-content\\\/uploads\\\/2018\\\/10\\\/67-e1539797626358.jpg\",\"articleSection\":[\"GIMP\",\"Programming\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2018\\\/10\\\/29\\\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2018\\\/10\\\/29\\\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\\\/\",\"url\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2018\\\/10\\\/29\\\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\\\/\",\"name\":\"How to make speech bubbles draw themselves: a story of pain (part 1) - Tamius&#039; sacred texts\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2018\\\/10\\\/29\\\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2018\\\/10\\\/29\\\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/wp-content\\\/uploads\\\/2018\\\/10\\\/67-e1539797626358.jpg\",\"datePublished\":\"2018-10-29T19:35:11+00:00\",\"dateModified\":\"2019-11-23T20:20:29+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/#\\\/schema\\\/person\\\/4677d05a4f45974f27cd21481c561c21\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2018\\\/10\\\/29\\\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2018\\\/10\\\/29\\\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2018\\\/10\\\/29\\\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\\\/#primaryimage\",\"url\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/wp-content\\\/uploads\\\/2018\\\/10\\\/67-e1539797626358.jpg\",\"contentUrl\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/wp-content\\\/uploads\\\/2018\\\/10\\\/67-e1539797626358.jpg\",\"width\":566,\"height\":800,\"caption\":\"Just to illustrate how bad it can get. Now admittedly an episode normally won't have this many bubbles, but that doesn't mean drawing speech bubbles isn't a colossal waste of time.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2018\\\/10\\\/29\\\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to make speech bubbles draw themselves: a story of pain (part 1)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/#website\",\"url\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/\",\"name\":\"Tamius&#039; sacred texts\",\"description\":\"... containing one of the weirdest mix of pointless topics.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/#\\\/schema\\\/person\\\/4677d05a4f45974f27cd21481c561c21\",\"name\":\"Tamius Han\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1ce12569905c4aff5d48778af8527565f1175c254ad56cc5e5221666ff1e222b?s=96&d=blank&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1ce12569905c4aff5d48778af8527565f1175c254ad56cc5e5221666ff1e222b?s=96&d=blank&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1ce12569905c4aff5d48778af8527565f1175c254ad56cc5e5221666ff1e222b?s=96&d=blank&r=pg\",\"caption\":\"Tamius Han\"},\"url\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/author\\\/tamius-han\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to make speech bubbles draw themselves: a story of pain (part 1) - Tamius&#039; sacred texts","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/stuff.tamius.net\/sacred-texts\/2018\/10\/29\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\/","og_locale":"en_US","og_type":"article","og_title":"How to make speech bubbles draw themselves: a story of pain (part 1) - Tamius&#039; sacred texts","og_description":"Every now and then, I sit down in front of my computer and start making a comic. It follows a very similar premise to DM of the Rings and Darths&amp;Droids \u2014 that is, take a movie (in my case, How To Train Your Dragon) and pretend it&#8217;s a D&amp;D session \u2014 except my work is much less original and not that good, probably. Oh...","og_url":"https:\/\/stuff.tamius.net\/sacred-texts\/2018\/10\/29\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\/","og_site_name":"Tamius&#039; sacred texts","article_published_time":"2018-10-29T19:35:11+00:00","article_modified_time":"2019-11-23T20:20:29+00:00","og_image":[{"url":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2018\/10\/67-e1539797626358.jpg","type":"","width":"","height":""}],"author":"Tamius Han","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Tamius Han","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2018\/10\/29\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\/#article","isPartOf":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2018\/10\/29\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\/"},"author":{"name":"Tamius Han","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/#\/schema\/person\/4677d05a4f45974f27cd21481c561c21"},"headline":"How to make speech bubbles draw themselves: a story of pain (part 1)","datePublished":"2018-10-29T19:35:11+00:00","dateModified":"2019-11-23T20:20:29+00:00","mainEntityOfPage":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2018\/10\/29\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\/"},"wordCount":1438,"commentCount":0,"image":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2018\/10\/29\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2018\/10\/67-e1539797626358.jpg","articleSection":["GIMP","Programming"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/stuff.tamius.net\/sacred-texts\/2018\/10\/29\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2018\/10\/29\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\/","url":"https:\/\/stuff.tamius.net\/sacred-texts\/2018\/10\/29\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\/","name":"How to make speech bubbles draw themselves: a story of pain (part 1) - Tamius&#039; sacred texts","isPartOf":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/#website"},"primaryImageOfPage":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2018\/10\/29\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\/#primaryimage"},"image":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2018\/10\/29\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2018\/10\/67-e1539797626358.jpg","datePublished":"2018-10-29T19:35:11+00:00","dateModified":"2019-11-23T20:20:29+00:00","author":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/#\/schema\/person\/4677d05a4f45974f27cd21481c561c21"},"breadcrumb":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2018\/10\/29\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/stuff.tamius.net\/sacred-texts\/2018\/10\/29\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2018\/10\/29\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\/#primaryimage","url":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2018\/10\/67-e1539797626358.jpg","contentUrl":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2018\/10\/67-e1539797626358.jpg","width":566,"height":800,"caption":"Just to illustrate how bad it can get. Now admittedly an episode normally won't have this many bubbles, but that doesn't mean drawing speech bubbles isn't a colossal waste of time."},{"@type":"BreadcrumbList","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2018\/10\/29\/how-to-make-speech-bubbles-draw-themselves-a-story-of-pain-part-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/stuff.tamius.net\/sacred-texts\/"},{"@type":"ListItem","position":2,"name":"How to make speech bubbles draw themselves: a story of pain (part 1)"}]},{"@type":"WebSite","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/#website","url":"https:\/\/stuff.tamius.net\/sacred-texts\/","name":"Tamius&#039; sacred texts","description":"... containing one of the weirdest mix of pointless topics.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/stuff.tamius.net\/sacred-texts\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/#\/schema\/person\/4677d05a4f45974f27cd21481c561c21","name":"Tamius Han","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/1ce12569905c4aff5d48778af8527565f1175c254ad56cc5e5221666ff1e222b?s=96&d=blank&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/1ce12569905c4aff5d48778af8527565f1175c254ad56cc5e5221666ff1e222b?s=96&d=blank&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1ce12569905c4aff5d48778af8527565f1175c254ad56cc5e5221666ff1e222b?s=96&d=blank&r=pg","caption":"Tamius Han"},"url":"https:\/\/stuff.tamius.net\/sacred-texts\/author\/tamius-han\/"}]}},"_links":{"self":[{"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/posts\/104","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/comments?post=104"}],"version-history":[{"count":7,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/posts\/104\/revisions"}],"predecessor-version":[{"id":454,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/posts\/104\/revisions\/454"}],"wp:attachment":[{"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/media?parent=104"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/categories?post=104"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/tags?post=104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}