{"id":29157,"date":"2023-05-23T11:32:47","date_gmt":"2023-05-23T18:32:47","guid":{"rendered":"https:\/\/cloudinary.com\/blog\/?p=29157"},"modified":"2023-05-26T09:57:03","modified_gmt":"2023-05-26T16:57:03","slug":"managing-image-programmatically-with-cloudinary-react-native","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/managing-image-programmatically-with-cloudinary-react-native","title":{"rendered":"Managing Image Programmatically with Cloudinary \u2014 React Native"},"content":{"rendered":"\n<p id=\"c654\">As mobile developers, we find ourselves in a battle where we are trying to create the most excellent applications. Still, the most excellent applications require rich media, images, videos, animations, and more!<\/p>\n\n\n\n<p id=\"5826\">Lately, I started playing around with the React Native framework which was originally developed by Facebook back in 2015.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Problem<\/h2>\n\n\n\n<p id=\"f13f\">Dealing with performance problems arising from managing various assets such as images, videos, and other types on different devices with varying screen sizes is among the most significant challenges faced by mobile developers.<\/p>\n\n\n\n<p id=\"5a00\">During my past employment, I had the responsibility of overseeing an application that enabled users to download images onto their mobile devices and set them as backgrounds for their lock or home screen, or both. This application necessitated the retrieval of significant JSON files that contained all the relevant image details, including the title, URL, and creation date. On the primary screen, I had to display a thumbnail of each image, which is a smaller version of the original. When a user clicked on a thumbnail, they were directed to a screen where the image was displayed in full-screen mode.<br>These two screens necessitated the use of several iterations of a single image. Displaying a full-screen image as a thumbnail image is not feasible as it results in a pixelated image, which provides a suboptimal user experience. Conversely, presenting the full-screen image would cause the screen to take an extended period to load, which is also detrimental to the user experience.<\/p>\n\n\n\n<p id=\"b6cb\">In addition, each image arrived in a distinct size, necessitating a consistent approach to display them. Furthermore, we aimed to ensure the application functioned optimally on a variety of devices, including iPhones, iPads, Android smartphones, and tablets, each requiring different image dimensions. The circumstance of displaying a single image in various sizes is quite prevalent. How can we address this challenge most effectively? Let us examine some potential solutions.<\/p>\n\n\n\n<p id=\"3f57\">A potential solution could be to acquire the image in a single size and modify it accordingly. Regrettably, this approach would be inefficient and may result in an extended processing period. Alternatively, we could tackle the issue on the server side (assuming one exists). We could generate various URLs and transmit them to the client. However, this approach could result in larger JSON files that are more challenging to handle and parse.<\/p>\n\n\n\n<p id=\"50c9\">That\u2019s where Cloudinary comes in.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Solution<\/h2>\n\n\n\n<p id=\"0f2a\"><strong>What\u2019s Cloudinary?<br><\/strong>Cloudinary is a platform that enables swift and straightforward creation, administration, and distribution of digital experiences, regardless of the browser, device, or bandwidth.<\/p>\n\n\n\n<p id=\"eba4\"><strong>Working with Cloudinary<\/strong><\/p>\n\n\n\n<p id=\"fc0b\"><strong>Setup<br><\/strong>The first thing you need to do is go to the Cloudinary&nbsp;<a href=\"http:\/\/www.cloudinary.com\/\" rel=\"noreferrer noopener\" target=\"_blank\">website<\/a>&nbsp;and sign-up for a free account.<\/p>\n\n\n\n<p id=\"45d2\">You can find the Git repository for the Cloudinary Flutter SDK&nbsp;<a href=\"https:\/\/github.com\/cloudinary\/cloudinary-react-native\" rel=\"noreferrer noopener\" target=\"_blank\">here<\/a>.<\/p>\n\n\n\n<p id=\"ecbd\">To integrate Cloudinary into your app you can use:<\/p>\n\n\n\n<p id=\"ecbd\"><code>npm install cloudinary-react-native<\/code><\/p>\n\n\n\n<p id=\"53b8\">Or<\/p>\n\n\n\n<p id=\"53b8\"><code>yarn add cloudinary-react-native --save<\/code><\/p>\n\n\n\n<p id=\"620d\"><strong>Configuration<br><\/strong>Once the package is integrated, we\u2019ll need to set up our Cloudinary object.<br>Your cloud name will appear in the dashboard where you created your account.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img width=\"700\" height=\"191\" data-public-id=\"Web_Assets\/blog\/image-1_291585f692\/image-1_291585f692.png\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/w_700,h_191,c_scale\/f_auto,q_auto\/v1684866448\/Web_Assets\/blog\/image-1_291585f692\/image-1_291585f692.png?_i=AA\" alt=\"\" class=\"wp-post-29157 wp-image-29158\" data-format=\"png\" data-transformations=\"f_auto,q_auto\" data-version=\"1684866448\" data-seo=\"1\" srcset=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866448\/Web_Assets\/blog\/image-1_291585f692\/image-1_291585f692.png?_i=AA 700w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866448\/Web_Assets\/blog\/image-1_291585f692\/image-1_291585f692.png?_i=AA 300w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n<pre class=\"wp-block-code\" 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-keyword\">import<\/span> { AdvancedImage } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'cloudinary-react-native'<\/span>;\n<span class=\"hljs-keyword\">import<\/span> { Cloudinary } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'@cloudinary\/url-gen'<\/span>;\n\n<span class=\"hljs-keyword\">const<\/span> myCld = <span class=\"hljs-keyword\">new<\/span> Cloudinary({\n <span class=\"hljs-attr\">cloud<\/span>: {\n  <span class=\"hljs-attr\">cloudName<\/span>: <span class=\"hljs-string\">\"demo\"<\/span>,\n },\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\n\n<p id=\"c9f3\"><strong>Transformations<br><\/strong>At the beginning of this article, I introduced a dilemma where we require a single asset in numerous sizes and aspect ratios. Let us examine how we can easily achieve this objective by employing Cloudinary\u2019s transformations.<\/p>\n\n\n\n<p id=\"05e0\">Here\u2019s the original image called \u2018tiger\u2019:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"1024\" height=\"682\" data-public-id=\"Web_Assets\/blog\/image_291598a936\/image_291598a936.jpeg\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/w_1024,h_682,c_scale\/f_auto,q_auto\/v1684866442\/Web_Assets\/blog\/image_291598a936\/image_291598a936.jpeg?_i=AA\" alt=\"\" class=\"wp-post-29157 wp-image-29159\" data-format=\"jpeg\" data-transformations=\"f_auto,q_auto\" data-version=\"1684866442\" data-seo=\"1\" srcset=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866442\/Web_Assets\/blog\/image_291598a936\/image_291598a936.jpeg?_i=AA 1400w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866442\/Web_Assets\/blog\/image_291598a936\/image_291598a936.jpeg?_i=AA 300w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866442\/Web_Assets\/blog\/image_291598a936\/image_291598a936.jpeg?_i=AA 768w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866442\/Web_Assets\/blog\/image_291598a936\/image_291598a936.jpeg?_i=AA 1024w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p id=\"857b\"><strong>Crop<\/strong><br>You can easily create a thumbnail(700&#215;700) for your main screen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-keyword\">import<\/span> {crop} <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"@cloudinary\/url-gen\/actions\/resize\"<\/span>;\n\n<span class=\"hljs-keyword\">var<\/span> myImage = cld.image(<span class=\"hljs-string\">'tiger'<\/span>).resize(crop().width(<span class=\"hljs-number\">700<\/span>).height(<span class=\"hljs-number\">700<\/span>));\n<span class=\"hljs-keyword\">var<\/span> url = myImage.toURL();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><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\n\n<p id=\"5984\">This code creates a new string URL using the&nbsp;<code>cld<\/code>object that was initiated in the previous step. The image function builds the URL using the&nbsp;<code>publicId<\/code>&nbsp;(\u2018tiger\u2019) of the specified image.<br>In this case, the&nbsp;<code>resize<\/code>action is applied with the&nbsp;<code>crop<\/code>&nbsp;and the values for&nbsp;<code>width<\/code>&nbsp;and&nbsp;<code>height<\/code>&nbsp;, Finally, the&nbsp;<code>toURL()<\/code>turns the object into a string and puts it into&nbsp;<code>url<\/code>&nbsp;variable.<\/p>\n\n\n\n<p id=\"ba3f\">This code will output a URL for the following image:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img width=\"700\" height=\"700\" data-public-id=\"Web_Assets\/blog\/image-1_2916088d0f\/image-1_2916088d0f.jpeg\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/w_700,h_700,c_fill,g_auto\/f_auto,q_auto\/v1684866438\/Web_Assets\/blog\/image-1_2916088d0f\/image-1_2916088d0f.jpeg?_i=AA\" alt=\"\" class=\"wp-post-29157 wp-image-29160\" data-format=\"jpeg\" data-transformations=\"f_auto,q_auto\" data-version=\"1684866438\" data-seo=\"1\" srcset=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866438\/Web_Assets\/blog\/image-1_2916088d0f\/image-1_2916088d0f.jpeg?_i=AA 700w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866438\/Web_Assets\/blog\/image-1_2916088d0f\/image-1_2916088d0f.jpeg?_i=AA 150w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866438\/Web_Assets\/blog\/image-1_2916088d0f\/image-1_2916088d0f.jpeg?_i=AA 300w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p id=\"6d31\">As we can see we got the 700&#215;700 thumbnail we wanted, but the result could be improved. We lost the tiger and we can see that the tiger\u2019s face is cut and not centered (not optimal at all).<br>What can we do? OH! Cloudinary has a few more tricks up its sleeve! Another COOL feature we can use is \u201cgravity\u201d where we can ask Cloudinary to focus on the most interesting object in the image.<\/p>\n\n\n\n<p id=\"9d8f\"><strong>Gravity<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-keyword\">import<\/span> {crop} <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"@cloudinary\/url-gen\/actions\/resize\"<\/span>;\n<span class=\"hljs-keyword\">import<\/span> {autoGravity} <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"@cloudinary\/url-gen\/qualifiers\/gravity\"<\/span>;\n\n<span class=\"hljs-keyword\">var<\/span> myImage = cld.image(<span class=\"hljs-string\">'tiger'<\/span>).resize(crop().width(<span class=\"hljs-number\">700<\/span>).height(<span class=\"hljs-number\">700<\/span>).gravity(autoGravity()));<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><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\n\n<figure class=\"wp-block-image size-full\"><img width=\"700\" height=\"700\" data-public-id=\"Web_Assets\/blog\/image-2_29161d7888\/image-2_29161d7888.jpeg\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/w_700,h_700,c_fill,g_auto\/f_auto,q_auto\/v1684866433\/Web_Assets\/blog\/image-2_29161d7888\/image-2_29161d7888.jpeg?_i=AA\" alt=\"\" class=\"wp-post-29157 wp-image-29161\" data-format=\"jpeg\" data-transformations=\"f_auto,q_auto\" data-version=\"1684866433\" data-seo=\"1\" srcset=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866433\/Web_Assets\/blog\/image-2_29161d7888\/image-2_29161d7888.jpeg?_i=AA 700w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866433\/Web_Assets\/blog\/image-2_29161d7888\/image-2_29161d7888.jpeg?_i=AA 150w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866433\/Web_Assets\/blog\/image-2_29161d7888\/image-2_29161d7888.jpeg?_i=AA 300w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p id=\"156d\">And as we can see the result is much better. The focus is on the tiger\u2019s face.<\/p>\n\n\n\n<p id=\"aca3\"><strong>Quality<br><\/strong>Here\u2019s another scenario to consider: Suppose you wish to send a 2k resolution image, which is a considerably large file, but there is no need to display it in its highest quality. However, mobile data roaming services may not always be able to handle large bandwidths. To reduce the image\u2019s size, we can leverage Cloudinary\u2019s \u201cquality\u201d feature.<\/p>\n\n\n\n<p id=\"9311\">Here\u2019s the original image (5MB)<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"1024\" height=\"576\" data-public-id=\"Web_Assets\/blog\/image-3_291628c1eb\/image-3_291628c1eb.jpeg\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/w_1024,h_576,c_scale\/f_auto,q_auto\/v1684866430\/Web_Assets\/blog\/image-3_291628c1eb\/image-3_291628c1eb.jpeg?_i=AA\" alt=\"\" class=\"wp-post-29157 wp-image-29162\" data-format=\"jpeg\" data-transformations=\"f_auto,q_auto\" data-version=\"1684866430\" data-seo=\"1\" srcset=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866430\/Web_Assets\/blog\/image-3_291628c1eb\/image-3_291628c1eb.jpeg?_i=AA 1400w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866430\/Web_Assets\/blog\/image-3_291628c1eb\/image-3_291628c1eb.jpeg?_i=AA 300w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866430\/Web_Assets\/blog\/image-3_291628c1eb\/image-3_291628c1eb.jpeg?_i=AA 768w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866430\/Web_Assets\/blog\/image-3_291628c1eb\/image-3_291628c1eb.jpeg?_i=AA 1024w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p id=\"01f6\">With Cloudinary we can do the following:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-keyword\">import<\/span> { auto } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'@cloudinary\/url-gen\/qualifiers\/quality'<\/span>;\n\n<span class=\"hljs-keyword\">var<\/span> myImage = cld.image(<span class=\"hljs-string\">'image_2k'<\/span>).quality(auto());<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><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\n\n<p id=\"5003\">This code will produce the following&nbsp;<a href=\"https:\/\/res.cloudinary.com\/db0edm7to\/image\/upload\/q_auto\/big_image_sample\" rel=\"noreferrer noopener\" target=\"_blank\">URL<\/a>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"1024\" height=\"576\" data-public-id=\"Web_Assets\/blog\/image-4_29163e0361\/image-4_29163e0361.jpeg\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/w_1024,h_576,c_scale\/f_auto,q_auto\/v1684866426\/Web_Assets\/blog\/image-4_29163e0361\/image-4_29163e0361.jpeg?_i=AA\" alt=\"\" class=\"wp-post-29157 wp-image-29163\" data-format=\"jpeg\" data-transformations=\"f_auto,q_auto\" data-version=\"1684866426\" data-seo=\"1\" srcset=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866426\/Web_Assets\/blog\/image-4_29163e0361\/image-4_29163e0361.jpeg?_i=AA 1400w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866426\/Web_Assets\/blog\/image-4_29163e0361\/image-4_29163e0361.jpeg?_i=AA 300w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866426\/Web_Assets\/blog\/image-4_29163e0361\/image-4_29163e0361.jpeg?_i=AA 768w, https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1684866426\/Web_Assets\/blog\/image-4_29163e0361\/image-4_29163e0361.jpeg?_i=AA 1024w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p id=\"0057\">After this transformation, the size is reduced to 626.56 KB and it\u2019ll be faster to load this image on a mobile device.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Cloudinary\u2019s Image Widget<\/h1>\n\n\n\n<p id=\"569b\">So far we\u2019ve seen how to generate URLs and we can manually put them into an image widget, but Cloudinary gives us an extra zing, an image widget that can integrate with everything we\u2019ve implemented so far.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-keyword\">import<\/span> { View } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'react-native'<\/span>;\n<span class=\"hljs-keyword\">import<\/span> { AdvancedImage } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'cloudinary-react-native'<\/span>;\n<span class=\"hljs-keyword\">import<\/span> {crop} <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"@cloudinary\/url-gen\/actions\/resize\"<\/span>;\n<span class=\"hljs-keyword\">import<\/span> { autoGravity } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'@cloudinary\/url-gen\/qualifiers\/gravity'<\/span>;\n<span class=\"hljs-keyword\">import<\/span> { auto } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'@cloudinary\/url-gen\/qualifiers\/quality'<\/span>;\n\n<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">App<\/span>(<span class=\"hljs-params\"><\/span>) <\/span>{\n<span class=\"hljs-keyword\">const<\/span> cld = <span class=\"hljs-keyword\">new<\/span> Cloudinary({\n  <span class=\"hljs-attr\">cloud<\/span>: {\n    <span class=\"hljs-attr\">cloudName<\/span>: <span class=\"hljs-string\">'&lt;Cloud_Name&gt;'<\/span>\n  },\n  <span class=\"hljs-attr\">url<\/span>: {\n    <span class=\"hljs-attr\">secure<\/span>: <span class=\"hljs-literal\">true<\/span> <span class=\"hljs-comment\">\/\/ force https, set to false to force http<\/span>\n  }\n});\n  <span class=\"hljs-keyword\">var<\/span> myImage = cld.image(<span class=\"hljs-string\">'tiger'<\/span>).quality(auto()).resize(crop().width(<span class=\"hljs-number\">800<\/span>).height(<span class=\"hljs-number\">800<\/span>).gravity(autoGravity()));\n  <span class=\"hljs-keyword\">return<\/span> (\n    <span class=\"xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">View<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">{styles.container}<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">AdvancedImage<\/span> <span class=\"hljs-attr\">cldImg<\/span>=<span class=\"hljs-string\">{myImage}<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">{{width:300,<\/span> <span class=\"hljs-attr\">height:300<\/span>}}\/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">View<\/span>&gt;<\/span><\/span>\n  );\n}\n\n<span class=\"hljs-keyword\">const<\/span> styles = StyleSheet.create({\n  <span class=\"hljs-attr\">container<\/span>: {\n    <span class=\"hljs-attr\">flex<\/span>: <span class=\"hljs-number\">1<\/span>,\n    <span class=\"hljs-attr\">alignItems<\/span>: <span class=\"hljs-string\">'center'<\/span>,\n    <span class=\"hljs-attr\">justifyContent<\/span>: <span class=\"hljs-string\">'center'<\/span>,\n  },\n});<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><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\n\n<p id=\"959d\">The important part to take from this code is the creation of&nbsp;<code>myImage<\/code>&nbsp;object which we have seen before.<\/p>\n\n\n\n<p id=\"6f1a\">We take&nbsp;<code>myImage<\/code>&nbsp;and use it in our image component&nbsp;<code>AdvancedImage<\/code>&nbsp;.<br>The&nbsp;<code>AdvacnedImage<\/code>&nbsp;component has all React Native&nbsp;<code>Image<\/code>&nbsp;component plus Cloudinary integration, which means we can send it the&nbsp;<code>cldImg<\/code>&nbsp;prop.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">To sum up!<\/h1>\n\n\n\n<p id=\"6a1d\">This blog post demonstrated how Cloudinary can effectively manage a single asset in multiple sizes and qualities. However, this is only the beginning, as Cloudinary provides a wealth of other features for media management in applications. I urge you to check Cloudinary\u2019s&nbsp;<a href=\"https:\/\/cloudinary.com\/documentation\" rel=\"noreferrer noopener\" target=\"_blank\">documentation<\/a>&nbsp;to maximize the platform\u2019s potential.<\/p>\n\n\n\n<p id=\"dbd9\">The Cloudinary SDK can also be found on&nbsp;<a href=\"https:\/\/github.com\/cloudinary\/cloudinary_android\" rel=\"noreferrer noopener\" target=\"_blank\">Android<\/a>,&nbsp;<a href=\"https:\/\/github.com\/cloudinary\/cloudinary_ios\" rel=\"noreferrer noopener\" target=\"_blank\">iOS<\/a>,&nbsp;<a href=\"https:\/\/github.com\/cloudinary\/cloudinary_flutter\" rel=\"noreferrer noopener\" target=\"_blank\">Flutter<\/a>, and 14 more languages you can find at&nbsp;<a href=\"https:\/\/github.com\/cloudinary\" rel=\"noreferrer noopener\" target=\"_blank\">Cloudinary\u2019s git<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As mobile developers, we find ourselves in a battle where we are trying to create the most excellent applications. Still, the most excellent applications require rich media, images, videos, animations, and more! Lately, I started playing around with the React Native framework which was originally developed by Facebook back in 2015. The Problem Dealing with [&hellip;]<\/p>\n","protected":false},"author":55,"featured_media":29164,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-29157","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"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>Managing Image Programmatically with Cloudinary \u2014 React Native<\/title>\n<meta name=\"description\" content=\"Cloudinary is a platform that enables swift and straightforward creation, administration, and distribution of digital experiences, regardless of the browser, device, or bandwidth.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Managing Image Programmatically with Cloudinary \u2014 React Native\" \/>\n<meta property=\"og:description\" content=\"Cloudinary is a platform that enables swift and straightforward creation, administration, and distribution of digital experiences, regardless of the browser, device, or bandwidth.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-23T18:32:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-26T16:57:03+00:00\" \/>\n<meta name=\"author\" content=\"nadinindre\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683745149\/Blog-React-Native-SDK\/Blog-React-Native-SDK.jpg?_i=AA\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/managing-image-programmatically-with-cloudinary-react-native\"},\"author\":{\"name\":\"nadinindre\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/717d6ece36182bb67bddcdf497e8c8ac\"},\"headline\":\"Managing Image Programmatically with Cloudinary \u2014 React Native\",\"datePublished\":\"2023-05-23T18:32:47+00:00\",\"dateModified\":\"2023-05-26T16:57:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/managing-image-programmatically-with-cloudinary-react-native\"},\"wordCount\":1020,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683745149\/Blog-React-Native-SDK\/Blog-React-Native-SDK.jpg?_i=AA\",\"inLanguage\":\"en-US\",\"copyrightYear\":\"2023\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/managing-image-programmatically-with-cloudinary-react-native\",\"url\":\"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca\",\"name\":\"Managing Image Programmatically with Cloudinary \u2014 React Native\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca#primaryimage\"},\"image\":{\"@id\":\"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683745149\/Blog-React-Native-SDK\/Blog-React-Native-SDK.jpg?_i=AA\",\"datePublished\":\"2023-05-23T18:32:47+00:00\",\"dateModified\":\"2023-05-26T16:57:03+00:00\",\"description\":\"Cloudinary is a platform that enables swift and straightforward creation, administration, and distribution of digital experiences, regardless of the browser, device, or bandwidth.\",\"breadcrumb\":{\"@id\":\"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683745149\/Blog-React-Native-SDK\/Blog-React-Native-SDK.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683745149\/Blog-React-Native-SDK\/Blog-React-Native-SDK.jpg?_i=AA\",\"width\":2000,\"height\":1100},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Managing Image Programmatically with Cloudinary \u2014 React Native\"}]},{\"@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\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/717d6ece36182bb67bddcdf497e8c8ac\",\"name\":\"nadinindre\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f3b4e2df2ea12a21dcc97a8ef9b13228f5642f820f0f631e368f4beaefafb5f4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f3b4e2df2ea12a21dcc97a8ef9b13228f5642f820f0f631e368f4beaefafb5f4?s=96&d=mm&r=g\",\"caption\":\"nadinindre\"},\"sameAs\":[\"nadinindre\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Managing Image Programmatically with Cloudinary \u2014 React Native","description":"Cloudinary is a platform that enables swift and straightforward creation, administration, and distribution of digital experiences, regardless of the browser, device, or bandwidth.","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:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca","og_locale":"en_US","og_type":"article","og_title":"Managing Image Programmatically with Cloudinary \u2014 React Native","og_description":"Cloudinary is a platform that enables swift and straightforward creation, administration, and distribution of digital experiences, regardless of the browser, device, or bandwidth.","og_url":"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca","og_site_name":"Cloudinary Blog","article_published_time":"2023-05-23T18:32:47+00:00","article_modified_time":"2023-05-26T16:57:03+00:00","author":"nadinindre","twitter_card":"summary_large_image","twitter_image":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683745149\/Blog-React-Native-SDK\/Blog-React-Native-SDK.jpg?_i=AA","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/managing-image-programmatically-with-cloudinary-react-native"},"author":{"name":"nadinindre","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/717d6ece36182bb67bddcdf497e8c8ac"},"headline":"Managing Image Programmatically with Cloudinary \u2014 React Native","datePublished":"2023-05-23T18:32:47+00:00","dateModified":"2023-05-26T16:57:03+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/managing-image-programmatically-with-cloudinary-react-native"},"wordCount":1020,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683745149\/Blog-React-Native-SDK\/Blog-React-Native-SDK.jpg?_i=AA","inLanguage":"en-US","copyrightYear":"2023","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/managing-image-programmatically-with-cloudinary-react-native","url":"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca","name":"Managing Image Programmatically with Cloudinary \u2014 React Native","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca#primaryimage"},"image":{"@id":"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683745149\/Blog-React-Native-SDK\/Blog-React-Native-SDK.jpg?_i=AA","datePublished":"2023-05-23T18:32:47+00:00","dateModified":"2023-05-26T16:57:03+00:00","description":"Cloudinary is a platform that enables swift and straightforward creation, administration, and distribution of digital experiences, regardless of the browser, device, or bandwidth.","breadcrumb":{"@id":"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683745149\/Blog-React-Native-SDK\/Blog-React-Native-SDK.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683745149\/Blog-React-Native-SDK\/Blog-React-Native-SDK.jpg?_i=AA","width":2000,"height":1100},{"@type":"BreadcrumbList","@id":"https:\/\/medium.com\/@adi.mizrahi\/managing-image-programmatically-with-cloudinary-react-native-cdb6a5eabbca#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Managing Image Programmatically with Cloudinary \u2014 React Native"}]},{"@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":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/717d6ece36182bb67bddcdf497e8c8ac","name":"nadinindre","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/f3b4e2df2ea12a21dcc97a8ef9b13228f5642f820f0f631e368f4beaefafb5f4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f3b4e2df2ea12a21dcc97a8ef9b13228f5642f820f0f631e368f4beaefafb5f4?s=96&d=mm&r=g","caption":"nadinindre"},"sameAs":["nadinindre"]}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683745149\/Blog-React-Native-SDK\/Blog-React-Native-SDK.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/29157","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\/55"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=29157"}],"version-history":[{"count":5,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/29157\/revisions"}],"predecessor-version":[{"id":29388,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/29157\/revisions\/29388"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/29164"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=29157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=29157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=29157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}