{"id":21686,"date":"2018-02-23T21:44:36","date_gmt":"2018-02-23T21:44:36","guid":{"rendered":"http:\/\/how_i_avoided_my_blurry_image_induced_meltdown"},"modified":"2018-02-23T21:44:36","modified_gmt":"2018-02-23T21:44:36","slug":"how_i_avoided_my_blurry_image_induced_meltdown","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown","title":{"rendered":"How I Avoided My Blurry-Image-Induced Meltdown"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><h2>My email banner looked hideous!<\/h2>\n<p>Recently, I was tasked with building an email invite to <a href=\"https:\/\/www.imagecon.com\/\">ImageCon<\/a>, Cloudinary\u2019s annual image and video management conference. This email was destined for the inboxes of almost our entire database, and as you can tell, it wasn\u2019t going well.<\/p>\n<p>After staring at the preview in disbelief in Marketo for a few seconds, I quickly cycled through the seven stages of grief. Actually, I got stuck on the first one &#8211; anger. I mean, just take a look at this monstrosity:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-res.cloudinary.com\/image\/upload\/w_600\/imagecon_banner_2018_vq2qe9.jpg\" alt=\"Simplifying the email image conundrum\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"600\" height=\"200\"\/>\n<em>Not pictured: me throwing things in a fit of rage.<\/em><\/p>\n<p>It\u2019s never a good sign when your images make you wonder if you\u2019re long overdue for a trip to the optometrist. Considering this email was going to hundreds of thousands of developers &#8211; and we are known for our abilities to deliver optimized images &#8211; I needed to seriously improve the email graphics.<\/p>\n<p>On the surface, replacing a banner on an email template should be simple. In Marketo, you should only have to find the URL of the image and replace it with one of equal size. It\u2019s a straightforward swap\u2026 or at least it should be.<\/p>\n<p>However, with the <strong>explosion<\/strong> in popularity of devices with high-resolution displays like the Galaxy Note 7 (ba-dum-<em>tiss<\/em>), things have gotten a little more complicated for marketers. Our images need to be optimized for the device on which our users engaging with content, while also loading quickly and efficiently.<\/p>\n<h2>Now what does all that have to do with my banner image?<\/h2>\n<p>Well, it turns out that, the 600&#215;200 image I was using was being set to a Device Pixel Ratio <code>DPR<\/code> of 1. That basically means that you get fewer pixels in your image which, when viewed on a high-resolution display, comes out looking  <strike>like hot garbage<\/strike> extremely blurry. This effect happens because high-resolution displays can fit more pixels in essentially the same amount of visual space.<\/p>\n<p>It fortunately displayed just fine on lower-resolution devices, but that wasn\u2019t much consolation knowing that many individuals receiving the message would be viewing it on high-resolution devices.<\/p>\n<p><cld-code-widget\n      class=\" c-code-widget\"\n      snippets=\"[{&quot;sdkId&quot;:&quot;nodejs&quot;,&quot;framework&quot;:&quot;nodejs&quot;,&quot;language&quot;:&quot;nodejs&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;, {dpr: \\&quot;2.0\\&quot;, width: 600, crop: \\&quot;scale\\&quot;})&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;, {dpr: \\&quot;2.0\\&quot;, width: 600, crop: \\&quot;scale\\&quot;})&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Node.js&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;react_2&quot;,&quot;framework&quot;:&quot;react_2&quot;,&quot;language&quot;:&quot;react&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;)\\n  .resize(scale().width(600))\\n  .delivery(dpr(\\&quot;2.0\\&quot;));&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;)\\n  .resize(scale().width(600))\\n  .delivery(dpr(\\&quot;2.0\\&quot;));&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;React&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/react&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;react&quot;,&quot;framework&quot;:&quot;react&quot;,&quot;language&quot;:&quot;react&quot;,&quot;rawCodeSnippet&quot;:&quot;&lt;Image publicId=\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot; &gt; &lt;Transformation dpr=\\&quot;2.0\\&quot; width=\\&quot;600\\&quot; crop=\\&quot;scale\\&quot; \\\/&gt; &lt;\\\/Image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;Image publicId=\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot; &gt;\\n\\t&lt;Transformation dpr=\\&quot;2.0\\&quot; width=\\&quot;600\\&quot; crop=\\&quot;scale\\&quot; \\\/&gt;\\n&lt;\\\/Image&gt;&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;React&quot;,&quot;packageName&quot;:&quot;cloudinary-react&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;vue_2&quot;,&quot;framework&quot;:&quot;vue_2&quot;,&quot;language&quot;:&quot;vue&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;)\\n  .resize(scale().width(600))\\n  .delivery(dpr(\\&quot;2.0\\&quot;));&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;)\\n  .resize(scale().width(600))\\n  .delivery(dpr(\\&quot;2.0\\&quot;));&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Vue.js&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/vue&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;vue&quot;,&quot;framework&quot;:&quot;vue&quot;,&quot;language&quot;:&quot;vue&quot;,&quot;rawCodeSnippet&quot;:&quot;&lt;cld-image public-id=\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot; &gt; &lt;cld-transformation dpr=\\&quot;2.0\\&quot; width=\\&quot;600\\&quot; crop=\\&quot;scale\\&quot; \\\/&gt; &lt;\\\/cld-image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;cld-image public-id=\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot; &gt;\\n\\t&lt;cld-transformation dpr=\\&quot;2.0\\&quot; width=\\&quot;600\\&quot; crop=\\&quot;scale\\&quot; \\\/&gt;\\n&lt;\\\/cld-image&gt;&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Vue.js&quot;,&quot;packageName&quot;:&quot;cloudinary-vue&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;angular_2&quot;,&quot;framework&quot;:&quot;angular_2&quot;,&quot;language&quot;:&quot;angular&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;)\\n  .resize(scale().width(600))\\n  .delivery(dpr(\\&quot;2.0\\&quot;));&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;)\\n  .resize(scale().width(600))\\n  .delivery(dpr(\\&quot;2.0\\&quot;));&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Angular&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/ng&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;angular&quot;,&quot;framework&quot;:&quot;angular&quot;,&quot;language&quot;:&quot;angular&quot;,&quot;rawCodeSnippet&quot;:&quot;&lt;cl-image public-id=\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot; &gt; &lt;cl-transformation dpr=\\&quot;2.0\\&quot; width=\\&quot;600\\&quot; crop=\\&quot;scale\\&quot;&gt; &lt;\\\/cl-transformation&gt; &lt;\\\/cl-image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;cl-image public-id=\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot; &gt;\\n\\t&lt;cl-transformation dpr=\\&quot;2.0\\&quot; width=\\&quot;600\\&quot; crop=\\&quot;scale\\&quot;&gt;\\n\\t&lt;\\\/cl-transformation&gt;\\n&lt;\\\/cl-image&gt;&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Angular&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/angular-5.x&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;js_2&quot;,&quot;framework&quot;:&quot;js_2&quot;,&quot;language&quot;:&quot;js&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;)\\n  .resize(scale().width(600))\\n  .delivery(dpr(\\&quot;2.0\\&quot;));&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;)\\n  .resize(scale().width(600))\\n  .delivery(dpr(\\&quot;2.0\\&quot;));&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;JS&quot;,&quot;packageName&quot;:&quot;@cloudinary\\\/url-gen&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;js&quot;,&quot;framework&quot;:&quot;js&quot;,&quot;language&quot;:&quot;js&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.imageTag(&#039;imagecon_banner_2018_vq2qe9.jpg&#039;, {dpr: \\&quot;2.0\\&quot;, width: 600, crop: \\&quot;scale\\&quot;}).toHtml();&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.imageTag(&#039;imagecon_banner_2018_vq2qe9.jpg&#039;, {dpr: \\&quot;2.0\\&quot;, width: 600, crop: \\&quot;scale\\&quot;}).toHtml();&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;JS&quot;,&quot;packageName&quot;:&quot;cloudinary-core&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;python&quot;,&quot;framework&quot;:&quot;python&quot;,&quot;language&quot;:&quot;python&quot;,&quot;rawCodeSnippet&quot;:&quot;CloudinaryImage(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;).image(dpr=\\&quot;2.0\\&quot;, width=600, crop=\\&quot;scale\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;CloudinaryImage(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;).image(dpr=\\&quot;2.0\\&quot;, width=600, crop=\\&quot;scale\\&quot;)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Python&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;php_2&quot;,&quot;framework&quot;:&quot;php_2&quot;,&quot;language&quot;:&quot;php&quot;,&quot;rawCodeSnippet&quot;:&quot;(new ImageTag(&#039;imagecon_banner_2018_vq2qe9.jpg&#039;))\\n\\t-&gt;resize(Resize::scale()-&gt;width(600))\\n\\t-&gt;delivery(Delivery::dpr(2.0));&quot;,&quot;codeSnippet&quot;:&quot;(new ImageTag(&#039;imagecon_banner_2018_vq2qe9.jpg&#039;))\\n\\t-&gt;resize(Resize::scale()-&gt;width(600))\\n\\t-&gt;delivery(Delivery::dpr(2.0));&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;PHP&quot;,&quot;packageName&quot;:&quot;cloudinary_php&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;3.x&quot;},{&quot;sdkId&quot;:&quot;php&quot;,&quot;framework&quot;:&quot;php&quot;,&quot;language&quot;:&quot;php&quot;,&quot;rawCodeSnippet&quot;:&quot;cl_image_tag(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;, array(\\&quot;dpr\\&quot;=&gt;\\&quot;2.0\\&quot;, \\&quot;width\\&quot;=&gt;600, \\&quot;crop\\&quot;=&gt;\\&quot;scale\\&quot;))&quot;,&quot;codeSnippet&quot;:&quot;cl_image_tag(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;, array(\\&quot;dpr\\&quot;=&gt;\\&quot;2.0\\&quot;, \\&quot;width\\&quot;=&gt;600, \\&quot;crop\\&quot;=&gt;\\&quot;scale\\&quot;))&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;PHP&quot;,&quot;packageName&quot;:&quot;cloudinary_php&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;java&quot;,&quot;framework&quot;:&quot;java&quot;,&quot;language&quot;:&quot;java&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.url().transformation(new Transformation().dpr(2.0).width(600).crop(\\&quot;scale\\&quot;)).imageTag(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.url().transformation(new Transformation().dpr(2.0).width(600).crop(\\&quot;scale\\&quot;)).imageTag(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Java&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;ruby&quot;,&quot;framework&quot;:&quot;ruby&quot;,&quot;language&quot;:&quot;ruby&quot;,&quot;rawCodeSnippet&quot;:&quot;cl_image_tag(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;, dpr: 2.0, width: 600, crop: \\&quot;scale\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;cl_image_tag(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;, dpr: 2.0, width: 600, crop: \\&quot;scale\\&quot;)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Ruby&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;csharp&quot;,&quot;framework&quot;:&quot;csharp&quot;,&quot;language&quot;:&quot;csharp&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.Api.UrlImgUp.Transform(new Transformation().Dpr(2.0).Width(600).Crop(\\&quot;scale\\&quot;)).BuildImageTag(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.Api.UrlImgUp.Transform(new Transformation().Dpr(2.0).Width(600).Crop(\\&quot;scale\\&quot;)).BuildImageTag(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;.NET&quot;,&quot;packageName&quot;:&quot;CloudinaryDotNet&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;dart&quot;,&quot;framework&quot;:&quot;dart&quot;,&quot;language&quot;:&quot;dart&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image(&#039;imagecon_banner_2018_vq2qe9.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.scale().width(600))\\n\\t.delivery(Delivery.dpr(&#039;2.0&#039;)));&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(&#039;imagecon_banner_2018_vq2qe9.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.scale().width(600))\\n\\t.delivery(Delivery.dpr(&#039;2.0&#039;)));&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Dart&quot;,&quot;packageName&quot;:&quot;cloudinary_dart&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;swift&quot;,&quot;framework&quot;:&quot;swift&quot;,&quot;language&quot;:&quot;swift&quot;,&quot;rawCodeSnippet&quot;:&quot;imageView.cldSetImage(cloudinary.createUrl().setTransformation(CLDTransformation().setDpr(2.0).setWidth(600).setCrop(\\&quot;scale\\&quot;)).generate(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;)!, cloudinary: cloudinary)&quot;,&quot;codeSnippet&quot;:&quot;imageView.cldSetImage(cloudinary.createUrl().setTransformation(CLDTransformation().setDpr(2.0).setWidth(600).setCrop(\\&quot;scale\\&quot;)).generate(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;)!, cloudinary: cloudinary)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;iOS&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;5.x&quot;},{&quot;sdkId&quot;:&quot;android&quot;,&quot;framework&quot;:&quot;android&quot;,&quot;language&quot;:&quot;android&quot;,&quot;rawCodeSnippet&quot;:&quot;MediaManager.get().url().transformation(new Transformation().dpr(2.0).width(600).crop(\\&quot;scale\\&quot;)).generate(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;MediaManager.get().url().transformation(new Transformation().dpr(2.0).width(600).crop(\\&quot;scale\\&quot;)).generate(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Android&quot;,&quot;packageName&quot;:&quot;cloudinary-android&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;3.x&quot;},{&quot;sdkId&quot;:&quot;flutter&quot;,&quot;framework&quot;:&quot;flutter&quot;,&quot;language&quot;:&quot;flutter&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image(&#039;imagecon_banner_2018_vq2qe9.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.scale().width(600))\\n\\t.delivery(Delivery.dpr(&#039;2.0&#039;)));&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(&#039;imagecon_banner_2018_vq2qe9.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.scale().width(600))\\n\\t.delivery(Delivery.dpr(&#039;2.0&#039;)));&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Flutter&quot;,&quot;packageName&quot;:&quot;cloudinary_flutter&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;kotlin&quot;,&quot;framework&quot;:&quot;kotlin&quot;,&quot;language&quot;:&quot;kotlin&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image {\\n\\tpublicId(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;)\\n\\t resize(Resize.scale() { width(600) })\\n\\t delivery(Delivery.dpr(2.0F)) \\n}.generate()&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image {\\n\\tpublicId(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;)\\n\\t resize(Resize.scale() { width(600) })\\n\\t delivery(Delivery.dpr(2.0F)) \\n}.generate()&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Kotlin&quot;,&quot;packageName&quot;:&quot;kotlin-url-gen&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;jquery&quot;,&quot;framework&quot;:&quot;jquery&quot;,&quot;language&quot;:&quot;jquery&quot;,&quot;rawCodeSnippet&quot;:&quot;$.cloudinary.image(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;, {dpr: \\&quot;2.0\\&quot;, width: 600, crop: \\&quot;scale\\&quot;})&quot;,&quot;codeSnippet&quot;:&quot;$.cloudinary.image(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;, {dpr: \\&quot;2.0\\&quot;, width: 600, crop: \\&quot;scale\\&quot;})&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;jQuery&quot;,&quot;packageName&quot;:&quot;cloudinary-jquery&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;react_native&quot;,&quot;framework&quot;:&quot;react_native&quot;,&quot;language&quot;:&quot;react_native&quot;,&quot;rawCodeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;)\\n  .resize(scale().width(600))\\n  .delivery(dpr(\\&quot;2.0\\&quot;));&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;imagecon_banner_2018_vq2qe9.jpg\\&quot;)\\n  .resize(scale().width(600))\\n  .delivery(dpr(\\&quot;2.0\\&quot;));&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;React Native&quot;,&quot;packageName&quot;:&quot;cloudinary-react-native&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;}]\"\n      parsed-url=\"{&quot;url&quot;:&quot;https:\\\/\\\/res.cloudinary.com\\\/demo\\\/image\\\/upload\\\/dpr_2.0,w_600\\\/imagecon_banner_2018_vq2qe9.jpg&quot;,&quot;cloud_name&quot;:&quot;demo&quot;,&quot;host&quot;:&quot;res.cloudinary.com&quot;,&quot;type&quot;:&quot;upload&quot;,&quot;resource_type&quot;:&quot;image&quot;,&quot;transformation&quot;:[{&quot;dpr&quot;:&quot;2.0&quot;,&quot;width&quot;:&quot;600&quot;}],&quot;transformation_string&quot;:&quot;dpr_2.0,w_600&quot;,&quot;url_suffix&quot;:&quot;&quot;,&quot;version&quot;:&quot;&quot;,&quot;secure&quot;:true,&quot;public_id&quot;:&quot;imagecon_banner_2018_vq2qe9.jpg&quot;,&quot;extension&quot;:&quot;jpg&quot;,&quot;format&quot;:&quot;jpg&quot;,&quot;format_code&quot;:true,&quot;url_code&quot;:false,&quot;signature&quot;:&quot;&quot;,&quot;private_cdn&quot;:false,&quot;result_asset_type&quot;:&quot;image&quot;}\"\n      with-url=\"true\"\n    >\n      <span class=\"u-visually-hidden\">Loading code examples<\/span>\n    <\/cld-code-widget><a class=\"c-image-link\" href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/dpr_2.0,w_600\/imagecon_banner_2018_vq2qe9.jpg\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/dpr_2.0,w_600\/imagecon_banner_2018_vq2qe9.jpg\" alt=\"ImageCon\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1200\" height=\"400\"\/><\/a><\/p>\n<p><em>So\u2026 much\u2026 better.<\/em><\/p>\n<p>When you can automatically optimize your images for delivery based on the viewing device, that\u2019s great. When you can do it all within the URL &#8211; without having to upload multiple images &#8211;  that\u2019s even better.<\/p>\n<p>With a small addition of <code>dpr_2.0<\/code> to the image URL in Cloudinary, I was able to sharpen the image almost instantly:<\/p>\n<pre class=\"js-syntax-highlighted\"><code>https:\/\/res.cloudinary.com\/demo\/image\/upload\/dpr_2.0,w_600\/imagecon_banner_2018_vq2qe9.jpg\n<\/code><\/pre>\n<p>You are technically able to accomplish the exact same thing by simply doubling the image resolution. However, with this URL in hand, I can repurpose the exact same image and replicate it across any of our assets and site pages via a simple modification of  the URL. This saves serious hassles for me, my design team and my developers a huge headache since I don\u2019t have to bug them for multiple copies of the exact same image.<\/p>\n<p>With that easy change to the URL, I now have a new image that <strike>I\u2019m content to send out<\/strike> enhance the email I\u2019m planning to send, as well as a replicable asset that I can modify with minuscule effort. Email is done, frustrations have subsided, a plan is in motion for additional ImageCon assets, and all is right in the world.<\/p>\n<p>Life is so much easier when your images look good, isn\u2019t it?<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":41,"featured_media":21687,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[25,89,165,227,251],"class_list":["post-21686","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-asset-management","tag-digital-asset-management","tag-image-transformation","tag-performance-optimization","tag-responsive-images"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Simplifying the email image conundrum<\/title>\n<meta name=\"description\" content=\"How to use DPR for Image Optimization for my email campaign.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How I Avoided My Blurry-Image-Induced Meltdown\" \/>\n<meta property=\"og:description\" content=\"How to use DPR for Image Optimization for my email campaign.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-02-23T21:44:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649723550\/Web_Assets\/blog\/Imagecon_TWITTER-RegisterNow-1\/Imagecon_TWITTER-RegisterNow-1.jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"1540\" \/>\n\t<meta property=\"og:image:height\" content=\"771\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"How I Avoided My Blurry-Image-Induced Meltdown\",\"datePublished\":\"2018-02-23T21:44:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown\"},\"wordCount\":6,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649723550\/Web_Assets\/blog\/Imagecon_TWITTER-RegisterNow-1\/Imagecon_TWITTER-RegisterNow-1.jpg?_i=AA\",\"keywords\":[\"Asset Management\",\"Digital Asset Management\",\"Image Transformation\",\"Performance Optimization\",\"Responsive Images\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2018\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown\",\"url\":\"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown\",\"name\":\"Simplifying the email image conundrum\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649723550\/Web_Assets\/blog\/Imagecon_TWITTER-RegisterNow-1\/Imagecon_TWITTER-RegisterNow-1.jpg?_i=AA\",\"datePublished\":\"2018-02-23T21:44:36+00:00\",\"description\":\"How to use DPR for Image Optimization for my email campaign.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649723550\/Web_Assets\/blog\/Imagecon_TWITTER-RegisterNow-1\/Imagecon_TWITTER-RegisterNow-1.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649723550\/Web_Assets\/blog\/Imagecon_TWITTER-RegisterNow-1\/Imagecon_TWITTER-RegisterNow-1.jpg?_i=AA\",\"width\":1540,\"height\":771},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How I Avoided My Blurry-Image-Induced Meltdown\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Simplifying the email image conundrum","description":"How to use DPR for Image Optimization for my email campaign.","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:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown","og_locale":"en_US","og_type":"article","og_title":"How I Avoided My Blurry-Image-Induced Meltdown","og_description":"How to use DPR for Image Optimization for my email campaign.","og_url":"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown","og_site_name":"Cloudinary Blog","article_published_time":"2018-02-23T21:44:36+00:00","og_image":[{"width":1540,"height":771,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649723550\/Web_Assets\/blog\/Imagecon_TWITTER-RegisterNow-1\/Imagecon_TWITTER-RegisterNow-1.jpg?_i=AA","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown"},"author":{"name":"","@id":""},"headline":"How I Avoided My Blurry-Image-Induced Meltdown","datePublished":"2018-02-23T21:44:36+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown"},"wordCount":6,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649723550\/Web_Assets\/blog\/Imagecon_TWITTER-RegisterNow-1\/Imagecon_TWITTER-RegisterNow-1.jpg?_i=AA","keywords":["Asset Management","Digital Asset Management","Image Transformation","Performance Optimization","Responsive Images"],"inLanguage":"en-US","copyrightYear":"2018","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown","url":"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown","name":"Simplifying the email image conundrum","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649723550\/Web_Assets\/blog\/Imagecon_TWITTER-RegisterNow-1\/Imagecon_TWITTER-RegisterNow-1.jpg?_i=AA","datePublished":"2018-02-23T21:44:36+00:00","description":"How to use DPR for Image Optimization for my email campaign.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649723550\/Web_Assets\/blog\/Imagecon_TWITTER-RegisterNow-1\/Imagecon_TWITTER-RegisterNow-1.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649723550\/Web_Assets\/blog\/Imagecon_TWITTER-RegisterNow-1\/Imagecon_TWITTER-RegisterNow-1.jpg?_i=AA","width":1540,"height":771},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/how_i_avoided_my_blurry_image_induced_meltdown#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How I Avoided My Blurry-Image-Induced Meltdown"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":""}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649723550\/Web_Assets\/blog\/Imagecon_TWITTER-RegisterNow-1\/Imagecon_TWITTER-RegisterNow-1.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21686","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=21686"}],"version-history":[{"count":0,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21686\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/21687"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=21686"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=21686"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=21686"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}