{"id":21632,"date":"2017-11-15T19:12:16","date_gmt":"2017-11-15T19:12:16","guid":{"rendered":"http:\/\/easy_image_loading_and_optimization_with_cloudinary_and_fresco"},"modified":"2025-03-30T01:58:19","modified_gmt":"2025-03-30T08:58:19","slug":"easy_image_loading_and_optimization_with_cloudinary_and_fresco","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco","title":{"rendered":"Image Loading and Optimization with Cloudinary and Fresco"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><p>As mobile developers, when talking about images and videos, one of our main concerns is creating a smooth and amazing experience for our users, no matter what kind of device or network connection they are using. In this article, I\u2019m going to show you how you can easily improve this experience using <a href=\"https:\/\/cloudinary.com\/\">Cloudinary<\/a> and <a href=\"https:\/\/frescolib.org\/\">Fresco<\/a>.<\/p>\n<p>In Android, working with images (bitmaps) is really difficult because the application runs out of memory (OOM) very frequently. OOM is the biggest nightmare for Android developers.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-res.cloudinary.com\/image\/upload\/c_fill\/dpr_auto\/1_0hTcjWXj85prs7_VuVR9_g.gif\" alt=\"Leslie Knope\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"245\" height=\"255\"\/><\/p>\n<p>There are some well known open source libraries that can help us deal with such problems like Picasa, Glide, and Fresco.<\/p>\n<p>Fresco (by Facebook) is my favorite. Fresco is written in C\/C++. It uses ashmem heap instead of VM heap. Intermediate byte buffers are also stored in the native heap. This leaves a lot more memory available for applications to use and reduces the risk of OOMs. It also reduces the amount of garbage collection required, leading to better performance and a smoother experience in our app. Another cool thing is that Fresco supports multiple images (multi-URI), requesting different image qualities per-situation, which help us further improve the user experience in cases of poor connectivity for example.<\/p>\n<h2>Multiple Image (Multi-URI) Requests<\/h2>\n<p>Suppose you want to show your users a high-resolution, relatively slow-to-download image. Rather than let them stare at a placeholder or a loading spinner for a while, you might want to quickly download a smaller thumbnail first. With Fresco this can be done by setting two image URIs, one for the low-resolution image, and one for the high-resolution one:<\/p>\n<pre class=\"js-syntax-highlighted\"><span><code class=\"hljs shcb-wrap-lines\">Uri lowResUri, highResUri;\nDraweeController controller = Fresco.newDraweeControllerBuilder()\n                .setLowResImageRequest(ImageRequest.fromUri(lowResUri))\n                .setImageRequest(ImageRequest.fromUri(highResUri))\n                .setOldController(mSimpleDraweeView.getController()).build();\nmSimpleDraweeView.setController(controller);\n<\/code><\/span><\/pre>\n<h2>But How I Can Generate Two Image Quality URIs?<\/h2>\n<p>Cloudinary\u2019s <a href=\"https:\/\/cloudinary.com\/documentation\/fetch_remote_images\">fetch<\/a> functionality enables on-the-fly transformation of remote images and optimized delivery via a super fast CDN. It allows us to easily and dynamically generate different image quality versions, regardless of the location of image.<\/p>\n<p>Let\u2019s say this is my original image, stored in my AWS S3 bucket:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-res.cloudinary.com\/image\/upload\/w_700,c_fill\/dpr_auto\/1_sANm3V13vN9SQRFGWHIerQ.png\" alt=\"donut\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1400\" height=\"700\"\/>\n<em><a href=\"https:\/\/s3.amazonaws.com\/myappmedia\/donut.png\">https:\/\/s3.amazonaws.com\/myappmedia\/donut.png<\/a><\/em><\/p>\n<p>You can see that this image\u2019s size is almost 1MB. Loading many such images can sometimes harm your user\u2019s experience while they are waiting for the image to fully load.<\/p>\n<p>With Cloudinary, it\u2019s super easy to fetch that image and generate both low and high-res image versions.<\/p>\n<h2>Fetching Remote Images With Cloudinary<\/h2>\n<p>Here\u2019s the basic URL template for fetching any remote image with Cloudinary:<\/p>\n<pre class=\"js-syntax-highlighted\"><code>https:\/\/res.cloudinary.com\/&lt;cloud&gt;\/image\/fetch\/&lt;transformations&gt;\/&lt;remote_image_url&gt;\n<\/code><\/pre>\n<h2>Add Dynamic Transformations For Low Resolution<\/h2>\n<p>And here\u2019s what the URL looks like when you add parameters that adjust the quality:<\/p>\n<pre class=\"js-syntax-highlighted\"><code>https:\/\/res.cloudinary.com\/demo\/image\/fetch\/f_webp,q_auto:low,w_400\/https:\/\/s3.amazonaws.com\/myappmedia\/donut.png\n<\/code><\/pre>\n<p>This transformation converts the image (\u201c<a href=\"https:\/\/cloudinary-res.cloudinary.com\/image\/upload\/1_sANm3V13vN9SQRFGWHIerQ.png\">donut<\/a>\u201c) to WebP, scales it down to a 400-pixel width, sets the quality to auto:low (an algorithm automatically does a quality vs. size trade-off where relatively low quality is considered acceptable). These transformations reduce the image size from nearly a megabyte to 2.37 KB (!)<\/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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;, {quality: \\&quot;auto:low\\&quot;, width: 400, fetch_format: \\&quot;auto\\&quot;, crop: \\&quot;scale\\&quot;, type: \\&quot;fetch\\&quot;})&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;, {quality: \\&quot;auto:low\\&quot;, width: 400, fetch_format: \\&quot;auto\\&quot;, crop: \\&quot;scale\\&quot;, type: \\&quot;fetch\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(auto()))\\n  .delivery(quality(autoLow()))\\n  .setDeliveryType(\\&quot;fetch\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(auto()))\\n  .delivery(quality(autoLow()))\\n  .setDeliveryType(\\&quot;fetch\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot; type=\\&quot;fetch\\&quot;&gt; &lt;Transformation quality=\\&quot;auto:low\\&quot; width=\\&quot;400\\&quot; fetchFormat=\\&quot;auto\\&quot; crop=\\&quot;scale\\&quot; \\\/&gt; &lt;\\\/Image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;Image publicId=\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot; type=\\&quot;fetch\\&quot;&gt;\\n\\t&lt;Transformation quality=\\&quot;auto:low\\&quot; width=\\&quot;400\\&quot; fetchFormat=\\&quot;auto\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(auto()))\\n  .delivery(quality(autoLow()))\\n  .setDeliveryType(\\&quot;fetch\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(auto()))\\n  .delivery(quality(autoLow()))\\n  .setDeliveryType(\\&quot;fetch\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot; type=\\&quot;fetch\\&quot;&gt; &lt;cld-transformation quality=\\&quot;auto:low\\&quot; width=\\&quot;400\\&quot; fetch-format=\\&quot;auto\\&quot; crop=\\&quot;scale\\&quot; \\\/&gt; &lt;\\\/cld-image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;cld-image public-id=\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot; type=\\&quot;fetch\\&quot;&gt;\\n\\t&lt;cld-transformation quality=\\&quot;auto:low\\&quot; width=\\&quot;400\\&quot; fetch-format=\\&quot;auto\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(auto()))\\n  .delivery(quality(autoLow()))\\n  .setDeliveryType(\\&quot;fetch\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(auto()))\\n  .delivery(quality(autoLow()))\\n  .setDeliveryType(\\&quot;fetch\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot; type=\\&quot;fetch\\&quot;&gt; &lt;cl-transformation quality=\\&quot;auto:low\\&quot; width=\\&quot;400\\&quot; fetch-format=\\&quot;auto\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot; type=\\&quot;fetch\\&quot;&gt;\\n\\t&lt;cl-transformation quality=\\&quot;auto:low\\&quot; width=\\&quot;400\\&quot; fetch-format=\\&quot;auto\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(auto()))\\n  .delivery(quality(autoLow()))\\n  .setDeliveryType(\\&quot;fetch\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(auto()))\\n  .delivery(quality(autoLow()))\\n  .setDeliveryType(\\&quot;fetch\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&#039;, {quality: \\&quot;auto:low\\&quot;, width: 400, fetchFormat: \\&quot;auto\\&quot;, crop: \\&quot;scale\\&quot;, type: \\&quot;fetch\\&quot;}).toHtml();&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.imageTag(&#039;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&#039;, {quality: \\&quot;auto:low\\&quot;, width: 400, fetchFormat: \\&quot;auto\\&quot;, crop: \\&quot;scale\\&quot;, type: \\&quot;fetch\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;).image(quality=\\&quot;auto:low\\&quot;, width=400, fetch_format=\\&quot;auto\\&quot;, crop=\\&quot;scale\\&quot;, type=\\&quot;fetch\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;CloudinaryImage(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;).image(quality=\\&quot;auto:low\\&quot;, width=400, fetch_format=\\&quot;auto\\&quot;, crop=\\&quot;scale\\&quot;, type=\\&quot;fetch\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&#039;))\\n\\t-&gt;resize(Resize::scale()-&gt;width(400))\\n\\t-&gt;delivery(Delivery::format(\\n\\tFormat::auto()))\\n\\t-&gt;delivery(Delivery::quality(\\n\\tQuality::autoLow()))\\n\\t-&gt;deliveryType(\\&quot;fetch\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;(new ImageTag(&#039;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&#039;))\\n\\t-&gt;resize(Resize::scale()-&gt;width(400))\\n\\t-&gt;delivery(Delivery::format(\\n\\tFormat::auto()))\\n\\t-&gt;delivery(Delivery::quality(\\n\\tQuality::autoLow()))\\n\\t-&gt;deliveryType(\\&quot;fetch\\&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;&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;, array(\\&quot;quality\\&quot;=&gt;\\&quot;auto:low\\&quot;, \\&quot;width\\&quot;=&gt;400, \\&quot;fetch_format\\&quot;=&gt;\\&quot;auto\\&quot;, \\&quot;crop\\&quot;=&gt;\\&quot;scale\\&quot;, \\&quot;type\\&quot;=&gt;\\&quot;fetch\\&quot;))&quot;,&quot;codeSnippet&quot;:&quot;cl_image_tag(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;, array(\\&quot;quality\\&quot;=&gt;\\&quot;auto:low\\&quot;, \\&quot;width\\&quot;=&gt;400, \\&quot;fetch_format\\&quot;=&gt;\\&quot;auto\\&quot;, \\&quot;crop\\&quot;=&gt;\\&quot;scale\\&quot;, \\&quot;type\\&quot;=&gt;\\&quot;fetch\\&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().quality(\\&quot;auto:low\\&quot;).width(400).fetchFormat(\\&quot;auto\\&quot;).crop(\\&quot;scale\\&quot;)).type(\\&quot;fetch\\&quot;).imageTag(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.url().transformation(new Transformation().quality(\\&quot;auto:low\\&quot;).width(400).fetchFormat(\\&quot;auto\\&quot;).crop(\\&quot;scale\\&quot;)).type(\\&quot;fetch\\&quot;).imageTag(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;, quality: \\&quot;auto:low\\&quot;, width: 400, fetch_format: \\&quot;auto\\&quot;, crop: \\&quot;scale\\&quot;, type: \\&quot;fetch\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;cl_image_tag(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;, quality: \\&quot;auto:low\\&quot;, width: 400, fetch_format: \\&quot;auto\\&quot;, crop: \\&quot;scale\\&quot;, type: \\&quot;fetch\\&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().Quality(\\&quot;auto:low\\&quot;).Width(400).FetchFormat(\\&quot;auto\\&quot;).Crop(\\&quot;scale\\&quot;)).Action(\\&quot;fetch\\&quot;).BuildImageTag(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.Api.UrlImgUp.Transform(new Transformation().Quality(\\&quot;auto:low\\&quot;).Width(400).FetchFormat(\\&quot;auto\\&quot;).Crop(\\&quot;scale\\&quot;)).Action(\\&quot;fetch\\&quot;).BuildImageTag(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&#039;).transformation(Transformation()\\n\\t.resize(Resize.scale().width(400))\\n\\t.delivery(Delivery.format(\\n\\tFormat.auto()))\\n\\t.delivery(Delivery.quality(\\n\\tQuality.autoLow()))\\n\\t.setDeliveryType(\\&quot;fetch\\&quot;));&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(&#039;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&#039;).transformation(Transformation()\\n\\t.resize(Resize.scale().width(400))\\n\\t.delivery(Delivery.format(\\n\\tFormat.auto()))\\n\\t.delivery(Delivery.quality(\\n\\tQuality.autoLow()))\\n\\t.setDeliveryType(\\&quot;fetch\\&quot;));&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().setType( \\&quot;fetch\\&quot;).setTransformation(CLDTransformation().setQuality(\\&quot;auto:low\\&quot;).setWidth(400).setFetchFormat(\\&quot;auto\\&quot;).setCrop(\\&quot;scale\\&quot;)).generate(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)!, cloudinary: cloudinary)&quot;,&quot;codeSnippet&quot;:&quot;imageView.cldSetImage(cloudinary.createUrl().setType( \\&quot;fetch\\&quot;).setTransformation(CLDTransformation().setQuality(\\&quot;auto:low\\&quot;).setWidth(400).setFetchFormat(\\&quot;auto\\&quot;).setCrop(\\&quot;scale\\&quot;)).generate(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&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().quality(\\&quot;auto:low\\&quot;).width(400).fetchFormat(\\&quot;auto\\&quot;).crop(\\&quot;scale\\&quot;)).type(\\&quot;fetch\\&quot;).generate(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;MediaManager.get().url().transformation(new Transformation().quality(\\&quot;auto:low\\&quot;).width(400).fetchFormat(\\&quot;auto\\&quot;).crop(\\&quot;scale\\&quot;)).type(\\&quot;fetch\\&quot;).generate(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&#039;).transformation(Transformation()\\n\\t.resize(Resize.scale().width(400))\\n\\t.delivery(Delivery.format(\\n\\tFormat.auto()))\\n\\t.delivery(Delivery.quality(\\n\\tQuality.autoLow()))\\n\\t.setDeliveryType(\\&quot;fetch\\&quot;));&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(&#039;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&#039;).transformation(Transformation()\\n\\t.resize(Resize.scale().width(400))\\n\\t.delivery(Delivery.format(\\n\\tFormat.auto()))\\n\\t.delivery(Delivery.quality(\\n\\tQuality.autoLow()))\\n\\t.setDeliveryType(\\&quot;fetch\\&quot;));&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n\\t resize(Resize.scale() { width(400) })\\n\\t delivery(Delivery.format(\\n\\tFormat.auto()))\\n\\t delivery(Delivery.quality(\\n\\tQuality.autoLow()))\\n\\t deliveryType(\\&quot;fetch\\&quot;) \\n}.generate()&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image {\\n\\tpublicId(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n\\t resize(Resize.scale() { width(400) })\\n\\t delivery(Delivery.format(\\n\\tFormat.auto()))\\n\\t delivery(Delivery.quality(\\n\\tQuality.autoLow()))\\n\\t deliveryType(\\&quot;fetch\\&quot;) \\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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;, {quality: \\&quot;auto:low\\&quot;, width: 400, fetch_format: \\&quot;auto\\&quot;, crop: \\&quot;scale\\&quot;, type: \\&quot;fetch\\&quot;})&quot;,&quot;codeSnippet&quot;:&quot;$.cloudinary.image(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;, {quality: \\&quot;auto:low\\&quot;, width: 400, fetch_format: \\&quot;auto\\&quot;, crop: \\&quot;scale\\&quot;, type: \\&quot;fetch\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(auto()))\\n  .delivery(quality(autoLow()))\\n  .setDeliveryType(\\&quot;fetch\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(auto()))\\n  .delivery(quality(autoLow()))\\n  .setDeliveryType(\\&quot;fetch\\&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\\\/fetch\\\/f_auto,q_auto:low,w_400\\\/https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&quot;,&quot;cloud_name&quot;:&quot;demo&quot;,&quot;host&quot;:&quot;res.cloudinary.com&quot;,&quot;type&quot;:&quot;fetch&quot;,&quot;resource_type&quot;:&quot;image&quot;,&quot;transformation&quot;:[{&quot;format&quot;:&quot;auto&quot;,&quot;quality&quot;:&quot;auto:low&quot;,&quot;width&quot;:&quot;400&quot;}],&quot;transformation_string&quot;:&quot;f_auto,q_auto:low,w_400&quot;,&quot;url_suffix&quot;:&quot;&quot;,&quot;version&quot;:&quot;&quot;,&quot;secure&quot;:true,&quot;public_id&quot;:&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&quot;,&quot;extension&quot;:&quot;png&quot;,&quot;format&quot;:&quot;auto&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\/fetch\/f_auto,q_auto:low,w_400\/https:\/\/s3.amazonaws.com\/myappmedia\/donut.png\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/fetch\/f_auto,q_auto:low,w_400\/https:\/\/s3.amazonaws.com\/myappmedia\/donut.png\" alt=\"donut\" loading=\"lazy\" class=\"c-transformed-asset\" \/><\/a><\/p>\n<blockquote>\n<p>Note that in order to work with WebP, the only thing you need to do is add the <code>webpsupport<\/code> library to your dependencies, like described <a href=\"https:\/\/frescolib.org\/docs\/webp-support.html\">here<\/a>.<\/p>\n<\/blockquote>\n<h2>Add Dynamic Transformations For High Resolution<\/h2>\n<p>It\u2019s important to note that you can also dynamically optimize your high quality 1MB image in order to make it more ideal for Android device screen sizes. So for your high-resolution version you can just change the quality parameter to \u201cauto:best\u201d and leave the width as it was for the low resolution. This transformation would generate a nice looking, small sized image of 6.88 KB.<\/p>\n<pre class=\"js-syntax-highlighted\"><code>https:\/\/res.cloudinary.com\/demo\/image\/fetch\/f_webp,q_auto:best,w_400\/https:\/\/s3.amazonaws.com\/myappmedia\/donut.png\n<\/code><\/pre>\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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;, {quality: \\&quot;auto:best\\&quot;, width: 400, fetch_format: \\&quot;webp\\&quot;, crop: \\&quot;scale\\&quot;, type: \\&quot;fetch\\&quot;})&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;, {quality: \\&quot;auto:best\\&quot;, width: 400, fetch_format: \\&quot;webp\\&quot;, crop: \\&quot;scale\\&quot;, type: \\&quot;fetch\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(webp()))\\n  .delivery(quality(autoBest()))\\n  .setDeliveryType(\\&quot;fetch\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(webp()))\\n  .delivery(quality(autoBest()))\\n  .setDeliveryType(\\&quot;fetch\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot; type=\\&quot;fetch\\&quot;&gt; &lt;Transformation quality=\\&quot;auto:best\\&quot; width=\\&quot;400\\&quot; fetchFormat=\\&quot;webp\\&quot; crop=\\&quot;scale\\&quot; \\\/&gt; &lt;\\\/Image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;Image publicId=\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot; type=\\&quot;fetch\\&quot;&gt;\\n\\t&lt;Transformation quality=\\&quot;auto:best\\&quot; width=\\&quot;400\\&quot; fetchFormat=\\&quot;webp\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(webp()))\\n  .delivery(quality(autoBest()))\\n  .setDeliveryType(\\&quot;fetch\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(webp()))\\n  .delivery(quality(autoBest()))\\n  .setDeliveryType(\\&quot;fetch\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot; type=\\&quot;fetch\\&quot;&gt; &lt;cld-transformation quality=\\&quot;auto:best\\&quot; width=\\&quot;400\\&quot; fetch-format=\\&quot;webp\\&quot; crop=\\&quot;scale\\&quot; \\\/&gt; &lt;\\\/cld-image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;cld-image public-id=\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot; type=\\&quot;fetch\\&quot;&gt;\\n\\t&lt;cld-transformation quality=\\&quot;auto:best\\&quot; width=\\&quot;400\\&quot; fetch-format=\\&quot;webp\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(webp()))\\n  .delivery(quality(autoBest()))\\n  .setDeliveryType(\\&quot;fetch\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(webp()))\\n  .delivery(quality(autoBest()))\\n  .setDeliveryType(\\&quot;fetch\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot; type=\\&quot;fetch\\&quot;&gt; &lt;cl-transformation quality=\\&quot;auto:best\\&quot; width=\\&quot;400\\&quot; fetch-format=\\&quot;webp\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot; type=\\&quot;fetch\\&quot;&gt;\\n\\t&lt;cl-transformation quality=\\&quot;auto:best\\&quot; width=\\&quot;400\\&quot; fetch-format=\\&quot;webp\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(webp()))\\n  .delivery(quality(autoBest()))\\n  .setDeliveryType(\\&quot;fetch\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(webp()))\\n  .delivery(quality(autoBest()))\\n  .setDeliveryType(\\&quot;fetch\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&#039;, {quality: \\&quot;auto:best\\&quot;, width: 400, fetchFormat: \\&quot;webp\\&quot;, crop: \\&quot;scale\\&quot;, type: \\&quot;fetch\\&quot;}).toHtml();&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.imageTag(&#039;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&#039;, {quality: \\&quot;auto:best\\&quot;, width: 400, fetchFormat: \\&quot;webp\\&quot;, crop: \\&quot;scale\\&quot;, type: \\&quot;fetch\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;).image(quality=\\&quot;auto:best\\&quot;, width=400, fetch_format=\\&quot;webp\\&quot;, crop=\\&quot;scale\\&quot;, type=\\&quot;fetch\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;CloudinaryImage(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;).image(quality=\\&quot;auto:best\\&quot;, width=400, fetch_format=\\&quot;webp\\&quot;, crop=\\&quot;scale\\&quot;, type=\\&quot;fetch\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&#039;))\\n\\t-&gt;resize(Resize::scale()-&gt;width(400))\\n\\t-&gt;delivery(Delivery::format(\\n\\tFormat::webp()))\\n\\t-&gt;delivery(Delivery::quality(\\n\\tQuality::autoBest()))\\n\\t-&gt;deliveryType(\\&quot;fetch\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;(new ImageTag(&#039;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&#039;))\\n\\t-&gt;resize(Resize::scale()-&gt;width(400))\\n\\t-&gt;delivery(Delivery::format(\\n\\tFormat::webp()))\\n\\t-&gt;delivery(Delivery::quality(\\n\\tQuality::autoBest()))\\n\\t-&gt;deliveryType(\\&quot;fetch\\&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;&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;, array(\\&quot;quality\\&quot;=&gt;\\&quot;auto:best\\&quot;, \\&quot;width\\&quot;=&gt;400, \\&quot;fetch_format\\&quot;=&gt;\\&quot;webp\\&quot;, \\&quot;crop\\&quot;=&gt;\\&quot;scale\\&quot;, \\&quot;type\\&quot;=&gt;\\&quot;fetch\\&quot;))&quot;,&quot;codeSnippet&quot;:&quot;cl_image_tag(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;, array(\\&quot;quality\\&quot;=&gt;\\&quot;auto:best\\&quot;, \\&quot;width\\&quot;=&gt;400, \\&quot;fetch_format\\&quot;=&gt;\\&quot;webp\\&quot;, \\&quot;crop\\&quot;=&gt;\\&quot;scale\\&quot;, \\&quot;type\\&quot;=&gt;\\&quot;fetch\\&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().quality(\\&quot;auto:best\\&quot;).width(400).fetchFormat(\\&quot;webp\\&quot;).crop(\\&quot;scale\\&quot;)).type(\\&quot;fetch\\&quot;).imageTag(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.url().transformation(new Transformation().quality(\\&quot;auto:best\\&quot;).width(400).fetchFormat(\\&quot;webp\\&quot;).crop(\\&quot;scale\\&quot;)).type(\\&quot;fetch\\&quot;).imageTag(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;, quality: \\&quot;auto:best\\&quot;, width: 400, fetch_format: \\&quot;webp\\&quot;, crop: \\&quot;scale\\&quot;, type: \\&quot;fetch\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;cl_image_tag(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;, quality: \\&quot;auto:best\\&quot;, width: 400, fetch_format: \\&quot;webp\\&quot;, crop: \\&quot;scale\\&quot;, type: \\&quot;fetch\\&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().Quality(\\&quot;auto:best\\&quot;).Width(400).FetchFormat(\\&quot;webp\\&quot;).Crop(\\&quot;scale\\&quot;)).Action(\\&quot;fetch\\&quot;).BuildImageTag(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.Api.UrlImgUp.Transform(new Transformation().Quality(\\&quot;auto:best\\&quot;).Width(400).FetchFormat(\\&quot;webp\\&quot;).Crop(\\&quot;scale\\&quot;)).Action(\\&quot;fetch\\&quot;).BuildImageTag(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&#039;).transformation(Transformation()\\n\\t.resize(Resize.scale().width(400))\\n\\t.delivery(Delivery.format(\\n\\tFormat.webp()))\\n\\t.delivery(Delivery.quality(\\n\\tQuality.autoBest()))\\n\\t.setDeliveryType(\\&quot;fetch\\&quot;));&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(&#039;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&#039;).transformation(Transformation()\\n\\t.resize(Resize.scale().width(400))\\n\\t.delivery(Delivery.format(\\n\\tFormat.webp()))\\n\\t.delivery(Delivery.quality(\\n\\tQuality.autoBest()))\\n\\t.setDeliveryType(\\&quot;fetch\\&quot;));&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().setType( \\&quot;fetch\\&quot;).setTransformation(CLDTransformation().setQuality(\\&quot;auto:best\\&quot;).setWidth(400).setFetchFormat(\\&quot;webp\\&quot;).setCrop(\\&quot;scale\\&quot;)).generate(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)!, cloudinary: cloudinary)&quot;,&quot;codeSnippet&quot;:&quot;imageView.cldSetImage(cloudinary.createUrl().setType( \\&quot;fetch\\&quot;).setTransformation(CLDTransformation().setQuality(\\&quot;auto:best\\&quot;).setWidth(400).setFetchFormat(\\&quot;webp\\&quot;).setCrop(\\&quot;scale\\&quot;)).generate(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&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().quality(\\&quot;auto:best\\&quot;).width(400).fetchFormat(\\&quot;webp\\&quot;).crop(\\&quot;scale\\&quot;)).type(\\&quot;fetch\\&quot;).generate(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;MediaManager.get().url().transformation(new Transformation().quality(\\&quot;auto:best\\&quot;).width(400).fetchFormat(\\&quot;webp\\&quot;).crop(\\&quot;scale\\&quot;)).type(\\&quot;fetch\\&quot;).generate(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&#039;).transformation(Transformation()\\n\\t.resize(Resize.scale().width(400))\\n\\t.delivery(Delivery.format(\\n\\tFormat.webp()))\\n\\t.delivery(Delivery.quality(\\n\\tQuality.autoBest()))\\n\\t.setDeliveryType(\\&quot;fetch\\&quot;));&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(&#039;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&#039;).transformation(Transformation()\\n\\t.resize(Resize.scale().width(400))\\n\\t.delivery(Delivery.format(\\n\\tFormat.webp()))\\n\\t.delivery(Delivery.quality(\\n\\tQuality.autoBest()))\\n\\t.setDeliveryType(\\&quot;fetch\\&quot;));&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n\\t resize(Resize.scale() { width(400) })\\n\\t delivery(Delivery.format(\\n\\tFormat.webp()))\\n\\t delivery(Delivery.quality(\\n\\tQuality.autoBest()))\\n\\t deliveryType(\\&quot;fetch\\&quot;) \\n}.generate()&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image {\\n\\tpublicId(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n\\t resize(Resize.scale() { width(400) })\\n\\t delivery(Delivery.format(\\n\\tFormat.webp()))\\n\\t delivery(Delivery.quality(\\n\\tQuality.autoBest()))\\n\\t deliveryType(\\&quot;fetch\\&quot;) \\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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;, {quality: \\&quot;auto:best\\&quot;, width: 400, fetch_format: \\&quot;webp\\&quot;, crop: \\&quot;scale\\&quot;, type: \\&quot;fetch\\&quot;})&quot;,&quot;codeSnippet&quot;:&quot;$.cloudinary.image(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;, {quality: \\&quot;auto:best\\&quot;, width: 400, fetch_format: \\&quot;webp\\&quot;, crop: \\&quot;scale\\&quot;, type: \\&quot;fetch\\&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;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(webp()))\\n  .delivery(quality(autoBest()))\\n  .setDeliveryType(\\&quot;fetch\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png\\&quot;)\\n  .resize(scale().width(400))\\n  .delivery(format(webp()))\\n  .delivery(quality(autoBest()))\\n  .setDeliveryType(\\&quot;fetch\\&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\\\/fetch\\\/f_webp,q_auto:best,w_400\\\/https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&quot;,&quot;cloud_name&quot;:&quot;demo&quot;,&quot;host&quot;:&quot;res.cloudinary.com&quot;,&quot;type&quot;:&quot;fetch&quot;,&quot;resource_type&quot;:&quot;image&quot;,&quot;transformation&quot;:[{&quot;format&quot;:&quot;webp&quot;,&quot;quality&quot;:&quot;auto:best&quot;,&quot;width&quot;:&quot;400&quot;}],&quot;transformation_string&quot;:&quot;f_webp,q_auto:best,w_400&quot;,&quot;url_suffix&quot;:&quot;&quot;,&quot;version&quot;:&quot;&quot;,&quot;secure&quot;:true,&quot;public_id&quot;:&quot;https:\\\/\\\/s3.amazonaws.com\\\/myappmedia\\\/donut.png&quot;,&quot;extension&quot;:&quot;png&quot;,&quot;format&quot;:&quot;webp&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\/fetch\/f_webp,q_auto:best,w_400\/https:\/\/s3.amazonaws.com\/myappmedia\/donut.png\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/fetch\/f_webp,q_auto:best,w_400\/https:\/\/s3.amazonaws.com\/myappmedia\/donut.png\" alt=\"donut\" loading=\"lazy\" class=\"c-transformed-asset\" \/><\/a><\/p>\n<p>To complete the example using Fresco, you just need to set those URLs for the low and high versions:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-built_in\">String<\/span> originalImageURL = <span class=\"hljs-string\">\"https:\/\/s3.amazonaws.com\/myappmedia\/donut.png\"<\/span>;\n<span class=\"hljs-built_in\">String<\/span> lowResUri = <span class=\"hljs-string\">\"https:\/\/res.cloudinary.com\/demo\/image\/fetch\/f_webp,q_auto:low,w_400\/e_blur:90\/\"<\/span> + originalImageURL;\n<span class=\"hljs-built_in\">String<\/span> highResUri = <span class=\"hljs-string\">\"https:\/\/res.cloudinary.com\/demo\/image\/fetch\/f_webp,q_auto:best,w_400\/\"<\/span> + originalImageURL;\nDraweeController controller = Fresco.newDraweeControllerBuilder() .setLowResImageRequest(ImageRequest.fromUri(Uri.parse(low_res_url))) .setImageRequest(ImageRequest.fromUri(Uri.parse(high_res_url))) .setOldController(mSimpleDraweeView.getController()).build();\nmSimpleDraweeView.setController(controller);\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<h2>Pretty easy, right?<\/h2>\n<p>Images and videos are the core component of any mobile app. Using both Cloudinary and Fresco can dramatically improve your Android users\u2019 experience with a small effort from your side as developers.<\/p>\n<p>Feel free to comment below if you have any questions about this post or any other media optimization related issues.\nIn our next post we are going to talk about how to\u2019 optimize video in your Android application, stay tuned!<\/p>\n<hr \/>\n<h2>Further Reading on Image Optimization<\/h2>\n<ul>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/image_optimization_for_websites_beautiful_pages_that_load_quickly\">Website image optimization and fast delivery with Cloudinary<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/image_optimization_in_php\">The complete guide to PHP image compression and optimization<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/vue_js_tutorial_image_optimization_for_web_apps\">Vue.js Tutorial: Images Optimization for Web Apps<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/image_optimization_in_python\">Python Image Optimization and Transformation<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/image_optimization_in_ruby\">Image Optimization in Ruby<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/image_optimization_in_wordpress\">Image Optimization for WordPress<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/the_great_jpeg_2000_debate_analyzing_the_pros_and_cons_to_widespread_adoption\">Learn about the pros and cons of JPEG 2000<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/quick_guide_using_webp_on_your_website_or_native_apps\">Adopting the WebP Image Format for Android on Websites Or Native Apps<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/top_10_mistakes_in_handling_website_images_and_how_to_solve_them\">10 Website Image Mistakes that Slow Load Times<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/adaptive_browser_based_image_format_delivery\">Automatically Reduce Image Size Without Losing Quality<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/low_quality_image_placeholders_lqip_explained\">Automate Placeholder Generation and Accelerate Page Loads<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/progressive_jpegs_and_green_martians\">3 Ways to Do Progressive JPEG Encoding<\/a>\n<\/li>\n<\/ul>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":41,"featured_media":21633,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[333,165,202,227,263],"class_list":["post-21632","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-android","tag-image-transformation","tag-mobile","tag-performance-optimization","tag-sdk"],"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>Image Loading and Optimization with Cloudinary and Fresco<\/title>\n<meta name=\"description\" content=\"Learn how to significantly improve user experience and image loading in Android apps.\" \/>\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\/easy_image_loading_and_optimization_with_cloudinary_and_fresco\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Image Loading and Optimization with Cloudinary and Fresco\" \/>\n<meta property=\"og:description\" content=\"Learn how to significantly improve user experience and image loading in Android apps.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-11-15T19:12:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-30T08:58:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1649725549\/Web_Assets\/blog\/loading-645268_1280\/loading-645268_1280-jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"1540\" \/>\n\t<meta property=\"og:image:height\" content=\"1083\" \/>\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\/easy_image_loading_and_optimization_with_cloudinary_and_fresco#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Image Loading and Optimization with Cloudinary and Fresco\",\"datePublished\":\"2017-11-15T19:12:16+00:00\",\"dateModified\":\"2025-03-30T08:58:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco\"},\"wordCount\":8,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649725549\/Web_Assets\/blog\/loading-645268_1280\/loading-645268_1280.jpg?_i=AA\",\"keywords\":[\"Android\",\"Image Transformation\",\"Mobile\",\"Performance Optimization\",\"SDK\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2017\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco\",\"url\":\"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco\",\"name\":\"Image Loading and Optimization with Cloudinary and Fresco\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649725549\/Web_Assets\/blog\/loading-645268_1280\/loading-645268_1280.jpg?_i=AA\",\"datePublished\":\"2017-11-15T19:12:16+00:00\",\"dateModified\":\"2025-03-30T08:58:19+00:00\",\"description\":\"Learn how to significantly improve user experience and image loading in Android apps.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649725549\/Web_Assets\/blog\/loading-645268_1280\/loading-645268_1280.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649725549\/Web_Assets\/blog\/loading-645268_1280\/loading-645268_1280.jpg?_i=AA\",\"width\":1540,\"height\":1083},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Image Loading and Optimization with Cloudinary and Fresco\"}]},{\"@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":"Image Loading and Optimization with Cloudinary and Fresco","description":"Learn how to significantly improve user experience and image loading in Android apps.","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\/easy_image_loading_and_optimization_with_cloudinary_and_fresco","og_locale":"en_US","og_type":"article","og_title":"Image Loading and Optimization with Cloudinary and Fresco","og_description":"Learn how to significantly improve user experience and image loading in Android apps.","og_url":"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco","og_site_name":"Cloudinary Blog","article_published_time":"2017-11-15T19:12:16+00:00","article_modified_time":"2025-03-30T08:58:19+00:00","og_image":[{"width":1540,"height":1083,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1649725549\/Web_Assets\/blog\/loading-645268_1280\/loading-645268_1280-jpg?_i=AA","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco"},"author":{"name":"","@id":""},"headline":"Image Loading and Optimization with Cloudinary and Fresco","datePublished":"2017-11-15T19:12:16+00:00","dateModified":"2025-03-30T08:58:19+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco"},"wordCount":8,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649725549\/Web_Assets\/blog\/loading-645268_1280\/loading-645268_1280.jpg?_i=AA","keywords":["Android","Image Transformation","Mobile","Performance Optimization","SDK"],"inLanguage":"en-US","copyrightYear":"2017","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco","url":"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco","name":"Image Loading and Optimization with Cloudinary and Fresco","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649725549\/Web_Assets\/blog\/loading-645268_1280\/loading-645268_1280.jpg?_i=AA","datePublished":"2017-11-15T19:12:16+00:00","dateModified":"2025-03-30T08:58:19+00:00","description":"Learn how to significantly improve user experience and image loading in Android apps.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649725549\/Web_Assets\/blog\/loading-645268_1280\/loading-645268_1280.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649725549\/Web_Assets\/blog\/loading-645268_1280\/loading-645268_1280.jpg?_i=AA","width":1540,"height":1083},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/easy_image_loading_and_optimization_with_cloudinary_and_fresco#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Image Loading and Optimization with Cloudinary and Fresco"}]},{"@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\/v1649725549\/Web_Assets\/blog\/loading-645268_1280\/loading-645268_1280.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21632","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=21632"}],"version-history":[{"count":4,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21632\/revisions"}],"predecessor-version":[{"id":37296,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21632\/revisions\/37296"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/21633"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=21632"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=21632"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=21632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}