{"id":21679,"date":"2018-02-15T19:03:16","date_gmt":"2018-02-15T19:03:16","guid":{"rendered":"http:\/\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing"},"modified":"2024-09-07T13:18:41","modified_gmt":"2024-09-07T20:18:41","slug":"giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing","title":{"rendered":"Giving your mobile app a boost &#8211; part 1:  Pre-upload image processing"},"content":{"rendered":"\n<style>\n.btn.exp-btn {\n    text-transform: none;\n    padding: 10px 30px;\n    font-size: 1.1em;\n    border-radius: 40px;\n    margin-top: 20px;\n    margin-bottom: 40px;\n    display: inline-block;\n    position: relative;\n    max-width: 400px;\n}\n#exp-btn-carrot {margin-bottom: 1px; margin-left: 1px;}\n.btn.exp-btn::after {\n    content: \"\";\n    display: inline-block;\n    background-image: url(https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1657723837\/exp-btn.png);\n    position: absolute;\n    background-size: contain;\n    background-repeat: no-repeat;\n    width: 33px;\n    height: 70px;\n    top: 0px;\n    right: -22px;\n}\n@media (max-width: 992px) {\n    .btn.exp-btn {margin-left: 0;}\n}\n\n@media (max-width: 500px) {\n     .btn.exp-btn {\n         max-width: initial;\n         margin-left: auto!important;\n         margin-right: auto;\n         font-size: 15px;\n         width: 300px;\n         display: block;\n         padding: 10px;\n     }\n.btn.exp-btn:after {display: none;}\n}\n<\/style>\n<div style=\"display: flex; justify-content: center;\"><a href=\"#enough_talking_let_s_code_\" class=\"exp-btn btn btn-sm btn-primary c-subscription-cta__link\">Shortcut to Cloudinary\u2019s solution\n<svg id=\"exp-btn-carrot\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10.759\" height=\"11.117\" viewBox=\"0 0 10.759 11.117\">\n  <path id=\"Polygon_1\" data-name=\"Polygon 1\" d=\"M4.248,0,8.5,7.518H0Z\" transform=\"translate(6.511) rotate(60)\" fill=\"#fff\"><\/path>\n<\/svg>\n<\/a><\/div>\n\n\n<div class=\"wp-block-cloudinary-markdown \"><p>As a mobile developer, enabling users to upload images and share them with other users is a very common requirement. When developing those capabilities, we need to take into account that most users won\u2019t think twice about uploading the massive images that their high-resolution mobile cameras capture. Those huge files are not only overkill for on-screen display, but can also cause significant slow downs in upload and delivery times. And of course those same users wouldn\u2019t think twice about complaining or abandoning our app if their overall user experience wasn\u2019t smooth and fast.<\/p>\n<p>Today, <a href=\"https:\/\/cloudinary.com\">Cloudinary<\/a> is happy to introduce two cool iOS and Android SDK features to seamlessly integrate within your current upload and delivery flow, and help to enhance your app\u2019s speed and performance while saving you lots of time and energy in your mobile development efforts.<\/p>\n<p>We\u2019ll do this in two parts. In this post, we\u2019ll cover our new <strong>pre-upload image processing<\/strong> feature. In <a href=\"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_2_mobile_responsive_image_delivery\">part 2<\/a>, we\u2019ll show you how to apply Cloudinary\u2019s <strong>responsive images<\/strong> solution for optimizing the image delivered based on the device\u2019s resolution and the dimensions available.<\/p>\n<h2>Cloudinary\u2019s New Preprocessing Object for Mobile SDKs<\/h2>\n<p>As mentioned above, users often select high resolution images to upload. To make our apps more performance and network-friendly, it makes sense to scale these images down before uploading them to the cloud. Cloudinary\u2019s new preprocessing feature allows you to resize (or in fact perform any action on) the images before uploading them to your Cloudinary account. This kind of upload-optimization functionality can dramatically reduce the time needed to upload, save bandwidth, and increase our app\u2019s performance.<\/p>\n<p>But how much should we scale down the image before uploading it to Cloudinary? To answer that, we need to calculate the maximum size image we will ever need to deliver.<\/p>\n<p>Let\u2019s start with Android calculations. The Android platform has a wide range of devices, and a seemingly unlimited variety of screen sizes and DPI. Fortunately, some are used more frequently than others; some are even deprecated. Android has 7 different DPIs, and it\u2019s generally accepted that you should pay attention to these 5: <code>mdpi, hdpi, xhdpi, xxhdpi,<\/code> and <code>xxxhdpi<\/code>.<\/p>\n<p>Because we want to ensure that our images will look great on every Android device, we probably want to support the maximum density, which is the <code>xxxhdpi<\/code> resolution.<\/p>\n<p>For example, let\u2019s assume that the image that we want to upload is a profile image and our ImageView size is 150*150dp (device-independent pixels, which defines a size independent of the device multiplier).  To convert from dp to pixels, we should use the following formula <a href=\"https:\/\/developer.android.com\/guide\/practices\/screens_support.html\">provided by Google<\/a>:<\/p>\n<div style=\"text-align:center\"><code>px = dp * (dpi \/ 160)<\/code><\/div>\n<p>So to calculate the relevant pixel size with xxxhdpi resolution (640 dpi):<\/p>\n<div style=\"text-align:center\"><code>px =150 * (640 \/ 160) = 600px<\/code><\/div>\n<p>In other words, to ensure that all Android devices can display our image without a loss of information, the image we upload should have a resolution of 600X600 px.<\/p>\n<p>What about iOS? This is much simpler to calculate than Android, we just take the largest DPR multiplier needed, which is @3x, and then multiply the target size by the scale factor  (<code>px = pt * scaleFactor<\/code>) , <code>150\u00a0*\u00a03\u00a0=\u00a0450px<\/code>. This is smaller than the maximum size needed for Android devices and is so is only relevant when your app will only run on iOS devices. But since we\u2019re assuming your app is for both operating systems, we\u2019ll pick 600px as our max required image size.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-res.cloudinary.com\/image\/upload\/dpr_auto,q_auto\/w_500\/mobile_resolutions.png\" alt=\"android and iOS resolutions\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1000\" height=\"704\"\/><\/p>\n<div style=\"text-align:center; font:small-caption\">\n<i>Image inspiration source: <a href=\"https:\/\/sympli.io\/blog\/2016\/08\/04\/why-designing-1x-is-the-best-resolution-for-scalable-design\/\">sympli blog<\/a><\/i> \n<\/div>\n<h2>Enough talking, let\u2019s code!<\/h2>\n<p>As mentioned, with our new pre-processing feature we can add  pre-upload actions like image resizing and image formatting. Let\u2019s take a look at these android and iOS upload code snippets:<\/p>\n<cld-code-widget\n      class=\" c-code-widget\"\n      snippets=\"[{&quot;sdkId&quot;:&quot;swift&quot;,&quot;framework&quot;:&quot;swift&quot;,&quot;language&quot;:&quot;java&quot;,&quot;displayName&quot;:&quot;iOS&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageVersion&quot;:&quot;5.x&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;rawCodeSnippet&quot;:&quot;let preprocessChain = CLDImagePreprocessChain()\\n  .addStep(CLDPreprocessHelpers.limit(width: 600, height: 600))\\n  .addStep(CLDPreprocessHelpers.dimensionsValidator(minWidth: 10, \\n     maxWidth: 600, minHeight: 10, maxHeight: 600)\\n  .setEncoder(CLDPreprocessHelpers.customImageEncoder\\n     (format: EncodingFormat.JPG, quality: 80)) \\n\\nlet request = cloudinary.createUploader()\\n  .upload( url: file, uploadPreset: \\&quot;samplePreset\\&quot;, \\n    preprocessChain: preprocessChain) \\n  .response({ (response, error) in \\\/\\\/ handle response })&quot;,&quot;codeSnippet&quot;:&quot;let preprocessChain = CLDImagePreprocessChain()\\n  .addStep(CLDPreprocessHelpers.limit(width: 600, height: 600))\\n  .addStep(CLDPreprocessHelpers.dimensionsValidator(minWidth: 10, \\n     maxWidth: 600, minHeight: 10, maxHeight: 600)\\n  .setEncoder(CLDPreprocessHelpers.customImageEncoder\\n     (format: EncodingFormat.JPG, quality: 80)) \\n\\nlet request = cloudinary.createUploader()\\n  .upload( url: file, uploadPreset: \\&quot;samplePreset\\&quot;, \\n    preprocessChain: preprocessChain) \\n  .response({ (response, error) in \\\/\\\/ handle response })&quot;},{&quot;sdkId&quot;:&quot;android&quot;,&quot;framework&quot;:&quot;android&quot;,&quot;language&quot;:&quot;java&quot;,&quot;displayName&quot;:&quot;Android&quot;,&quot;packageName&quot;:&quot;cloudinary-android&quot;,&quot;packageVersion&quot;:&quot;3.x&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;rawCodeSnippet&quot;:&quot;String requestId = MediaManager.get().upload(&lt;file&gt;)\\n   .unsigned(\\&quot;sample_app_preset\\&quot;).build());\\nrequest.preprocess(ImagePreprocessChain.limitDimensionsChain(600, 600)\\n  .saveWith(new BitmapEncoder(BitmapEncoder.Format.WEBP, 80)));\\nrequest.dispatch(context);&quot;,&quot;codeSnippet&quot;:&quot;String requestId = MediaManager.get().upload(&lt;file&gt;)\\n   .unsigned(\\&quot;sample_app_preset\\&quot;).build());\\nrequest.preprocess(ImagePreprocessChain.limitDimensionsChain(600, 600)\\n  .saveWith(new BitmapEncoder(BitmapEncoder.Format.WEBP, 80)));\\nrequest.dispatch(context);&quot;}]\"\n      parsed-url=\"[]\"\n      with-url=\"false\"\n    >\n      <span class=\"u-visually-hidden\">Loading code examples<\/span>\n    <\/cld-code-widget>\n<p>This code performs three pre-processing actions:<\/p>\n<ol>\n<li>It scales down any image above 600*600 pixels.<\/li>\n<li>It re-encodes the image format to WebP when uploading from an Android device and to <a href=\"https:\/\/cloudinary.com\/tools\/compress-jpg\">JPG<\/a> when uploading from iOS.<\/li>\n<li>It changes the quality to 80 to retain a good visual appearance at a much smaller file size.<\/li>\n<\/ol>\n<p>These actions will take place before uploading the file, and in combination will result in a significantly faster and more optimized upload compared to the original high-resolution, relatively slow-to-upload images.<\/p>\n<p>So to sum up, in addition to taking advantage of Cloudinary to easily optimize transform your images on-the-fly to any required format, style and dimension <strong>on delivery<\/strong>, it\u2019s also important to pay attention to, and optimize, the <strong>upload<\/strong> process.  As a mobile developer, whenever you need to upload images, make sure you take into consideration  the maximum size image you\u2019ll need to deliver and then never upload anything bigger. <a href=\"https:\/\/cloudinary.com\/users\/register\/free\/?utm_content=cta-free-sign-up-mob-up-img\">Click here<\/a> to claim your free forever Cloudinary account.<\/p>\n<h2>What\u2019s next?<\/h2>\n<p>In part 1 of this \u2018mobile app boost\u2019 blog series, we covered how you can use the new <code>preprocess<\/code> object to help save bandwidth and optimize the upload process by reducing the  image size to the largest size needed.  You can also use this object to perform other preprocessing actions such as converting to other formats, changing the quality setting as we showed in the sample code above, or even defining your own custom preprocess functions.<\/p>\n<p>This pre-upload processing feature is the latest among a rich selection of image management features that are available in our Android and iOS SDKs.<\/p>\n<p>For more details about preprocessing image uploads, check out our <a href=\"https:\/\/cloudinary.com\/documentation\/android_image_and_video_upload#preprocess_image_uploads\">Android<\/a> and <a href=\"https:\/\/cloudinary.com\/documentation\/ios_image_and_video_upload#preprocess_image_uploads\">iOS SDK documentation<\/a>.<\/p>\n<p>So, now that you know how you can limit the max size of an image during upload, does that mean you have to deliver that same size to all devices? Of course not. Optimal, responsive delivery demands that we deliver just the right size to each device.<\/p>\n<p><a href=\"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_2_mobile_responsive_image_delivery\">In part 2 of this series<\/a>, we will show you how to do just that, using the new <strong>responsive images<\/strong> functionality in our latest iOS and Android SDKs versions. Stay tuned!<\/p>\n<h3>What now?<\/h3>\n<p>You can now start playing with these capabilities.<\/p>\n<p>If you don\u2019t have a Cloudinary account yet, <a href=\"https:\/\/cloudinary.com\/users\/register_free\">sign up for a free one<\/a>, install the <a href=\"https:\/\/cloudinary.com\/documentation\/ios_integration#installation\">iOS<\/a> and\/or <a href=\"https:\/\/cloudinary.com\/documentation\/android_integration#installation\">Android<\/a> SDKs, and check out how quickly you can start improving your users\u2019 experience. Let us know how it goes!<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Shortcut to Cloudinary\u2019s solution<\/p>\n","protected":false},"author":41,"featured_media":22682,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[333,174,202],"class_list":["post-21679","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-android","tag-ios","tag-mobile"],"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>Give your Mobile App a Boost: Image Upload Preprocessing<\/title>\n<meta name=\"description\" content=\"Mobile app developers can improve image upload performance by scaling down images before upload using Cloudinary&#039;s preprocessing object in Android and iOS SDKs.\" \/>\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\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Giving your mobile app a boost - part 1: Pre-upload image processing\" \/>\n<meta property=\"og:description\" content=\"Mobile app developers can improve image upload performance by scaling down images before upload using Cloudinary&#039;s preprocessing object in Android and iOS SDKs.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-02-15T19:03:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-07T20:18:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1645575183\/website-2021\/blog\/Mobile_App_Image_Processing\/Mobile_App_Image_Processing-png?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1100\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\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\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Giving your mobile app a boost &#8211; part 1: Pre-upload image processing\",\"datePublished\":\"2018-02-15T19:03:16+00:00\",\"dateModified\":\"2024-09-07T20:18:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing\"},\"wordCount\":16,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1645575183\/website-2021\/blog\/Mobile_App_Image_Processing\/Mobile_App_Image_Processing.png?_i=AA\",\"keywords\":[\"Android\",\"iOS\",\"Mobile\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2018\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing\",\"url\":\"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing\",\"name\":\"Give your Mobile App a Boost: Image Upload Preprocessing\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1645575183\/website-2021\/blog\/Mobile_App_Image_Processing\/Mobile_App_Image_Processing.png?_i=AA\",\"datePublished\":\"2018-02-15T19:03:16+00:00\",\"dateModified\":\"2024-09-07T20:18:41+00:00\",\"description\":\"Mobile app developers can improve image upload performance by scaling down images before upload using Cloudinary's preprocessing object in Android and iOS SDKs.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1645575183\/website-2021\/blog\/Mobile_App_Image_Processing\/Mobile_App_Image_Processing.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1645575183\/website-2021\/blog\/Mobile_App_Image_Processing\/Mobile_App_Image_Processing.png?_i=AA\",\"width\":2000,\"height\":1100},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Giving your mobile app a boost &#8211; part 1: Pre-upload image processing\"}]},{\"@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":"Give your Mobile App a Boost: Image Upload Preprocessing","description":"Mobile app developers can improve image upload performance by scaling down images before upload using Cloudinary's preprocessing object in Android and iOS SDKs.","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\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing","og_locale":"en_US","og_type":"article","og_title":"Giving your mobile app a boost - part 1: Pre-upload image processing","og_description":"Mobile app developers can improve image upload performance by scaling down images before upload using Cloudinary's preprocessing object in Android and iOS SDKs.","og_url":"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing","og_site_name":"Cloudinary Blog","article_published_time":"2018-02-15T19:03:16+00:00","article_modified_time":"2024-09-07T20:18:41+00:00","og_image":[{"width":2000,"height":1100,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1645575183\/website-2021\/blog\/Mobile_App_Image_Processing\/Mobile_App_Image_Processing-png?_i=AA","type":"image\/png"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing"},"author":{"name":"","@id":""},"headline":"Giving your mobile app a boost &#8211; part 1: Pre-upload image processing","datePublished":"2018-02-15T19:03:16+00:00","dateModified":"2024-09-07T20:18:41+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing"},"wordCount":16,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1645575183\/website-2021\/blog\/Mobile_App_Image_Processing\/Mobile_App_Image_Processing.png?_i=AA","keywords":["Android","iOS","Mobile"],"inLanguage":"en-US","copyrightYear":"2018","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing","url":"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing","name":"Give your Mobile App a Boost: Image Upload Preprocessing","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1645575183\/website-2021\/blog\/Mobile_App_Image_Processing\/Mobile_App_Image_Processing.png?_i=AA","datePublished":"2018-02-15T19:03:16+00:00","dateModified":"2024-09-07T20:18:41+00:00","description":"Mobile app developers can improve image upload performance by scaling down images before upload using Cloudinary's preprocessing object in Android and iOS SDKs.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1645575183\/website-2021\/blog\/Mobile_App_Image_Processing\/Mobile_App_Image_Processing.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1645575183\/website-2021\/blog\/Mobile_App_Image_Processing\/Mobile_App_Image_Processing.png?_i=AA","width":2000,"height":1100},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/giving_your_mobile_app_a_boost_part_1_pre_upload_image_processing#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Giving your mobile app a boost &#8211; part 1: Pre-upload image processing"}]},{"@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\/v1645575183\/website-2021\/blog\/Mobile_App_Image_Processing\/Mobile_App_Image_Processing.png?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21679","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=21679"}],"version-history":[{"count":5,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21679\/revisions"}],"predecessor-version":[{"id":35592,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21679\/revisions\/35592"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/22682"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=21679"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=21679"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=21679"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}