{"id":21869,"date":"2020-02-15T10:35:00","date_gmt":"2020-02-15T10:35:00","guid":{"rendered":"http:\/\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject"},"modified":"2025-08-21T12:19:19","modified_gmt":"2025-08-21T19:19:19","slug":"new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject","title":{"rendered":"New AI-Based Image Auto-Crop Algorithm Sticks to the Subject"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><p>If you\u2019re the developer for an online store, a news site, a social media app, or any other website that delivers new media content on a regular basis, you are probably painfully familiar with both the challenge and importance of delivering well-cropped images.<\/p>\n<p>In a nutshell, your customers expect top-quality, quick-loading photos that clearly show them what they need to see no matter what device they happen to be using at the moment. Making them happy requires delivering the same image in many different aspect ratios, and potentially cropping closer or wider on your main subject, depending on size. Hardly sounds reasonable, but if you don\u2019t meet their expectations, your customers will just go somewhere else\u2026<\/p>\n<p>(Why do I feel like I\u2019m describing my teenage daughters? Well, to be honest, the demanding nature and short attention span of today\u2019s online customers have a lot in common with teens\u2026)<\/p>\n<p>But unlike teens, you can\u2019t afford to fall short of your users\u2019 demands. If you\u2019ve got hundreds or thousands of images to deliver every day, you can\u2019t manually crop every image to the right size for every device and placement. Simple client-side scaling of your high quality images would mean completely unacceptable performance and quality. So it\u2019s clear that you must adjust the size and aspect ratio of your images programmatically, and then deliver the various image resolutions using responsive delivery code, probably via <code>&lt;picture&gt;<\/code> and <code>&lt;srcset&gt;<\/code> tags.<\/p>\n<p>Then the question arises \u2013 if you programmatically crop the same photo to significantly different aspect ratios, how can you be sure your code won\u2019t crop off the most important parts of your products, news subjects, or that adorable cat your users just have to share with the world?<\/p>\n<p>If you are already familiar with <a href=\"https:\/\/cloudinary.com\">Cloudinary\u2019s<\/a> powerful media management and delivery capabilities, you might be saying &#8211; what\u2019s the problem? Just use Cloudinary\u2019s image auto-cropping <strong>gravity<\/strong> parameter (aka <code>g_auto<\/code>) and it will do the hard work for you!<\/p>\n<p>And in fact, thousands of Cloudinary developers already use <code>g_auto<\/code> in their image URLs to automatically crop millions of images daily. That parameter applies a sophisticated algorithm that analyzes the pixels in an image and prioritizes the most salient areas of each image on-the-fly. The analysis gives priority to skin tones, <a href=\"https:\/\/cloudinary.com\/glossary\/edge-detection\">edge detection<\/a>, color contrasts, any detected faces, and more, in order to determine the most important areas to keep when it crops.<\/p>\n<p>But what if Cloudinary\u2019s already powerful image auto-crop functionality could be even smarter?<\/p>\n<p>Related content: Read our guide to <a href=\"https:\/\/cloudinary.com\/guides\/automatic-image-cropping\/server-side-rendering-benefits-use-cases-and-best-practices\">server side rendering<\/a>.<\/p>\n<h2>Introducing Subject Detection Image Auto Cropping<\/h2>\n<p>Cloudinary\u2019s new and improved deep-learning-based <code>g_auto <\/code>transformation parameter goes beyond the saliency analysis described above, adding the capability to actually detect the subjects in an image that would be most likely to capture a person\u2019s attention.<\/p>\n<p>To accomplish this, our new image auto-cropping deep learning mechanism has been (and continues to be) fed with tens of thousands of images and corresponding human input that together teach our machines to predict the important regions in images, no matter their subject and layout. This involves advanced computations performed by GPU-based hardware clusters that process millions of crop requests on the fly.  The result is completely unique auto-cropping functionality that provides very impressive outputs.<\/p>\n<p>Remember those products, news images, and user-generated content (aka cats) we talked about above?<\/p>\n<p>Look what would happen to these mobile-camera photographs if we were to crop them to a square using the standard center cropping that other programs often apply, and how the new and improved g_auto with subject-detection cropping comes to the rescue in each of these crops:<\/p>\n<div style=\"clear: both; margin-bottom: 20px\">\n<\/div>\n<div style=\"text-align:center;\">\n<span style=\"display:inline-block;vertical-align:top;\">\n<a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_800\/docs\/product_minion_185.jpg\" target =\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/h_125\/docs\/product_minion_185.jpg\" alt=\"Product - original\" title=\"Product - original\" style=\"margin-right: 30px;display:block;\" \/><\/a>\n<small><b style=\"margin-right: 30px;display:block;\">original<\/b><\/small>\n<\/span>\n<span style=\"display:inline-block;vertical-align:top;\">\n<a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_fill,ar_1,w_800\/docs\/product_minion_185.jpg\" target =\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_fill,ar_1,h_125\/docs\/product_minion_185.jpg\" alt=\"Product image with center cropping\" title=\"Product image with center crop\" style=\"margin-right: 30px;display:block;\" \/><\/a>\n<small><b style=\"margin-right: 30px;display:block;\">center crop<\/b><\/small>\n<\/span>\n<span style=\"display:inline-block;vertical-align:top;\">\n<a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/g_auto,c_fill,ar_1,w_800\/docs\/product_minion_185.jpg\" target =\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/g_auto,c_fill,ar_1,h_125\/docs\/product_minion_185.jpg\" alt=\"Product image with subject detection cropping\" title=\"Product image with subject detection cropping\" style=\"margin-right: 30px;display:block;\" \/><\/a>\n<small><b style=\"margin-right: 30px;display:block;\">g_auto crop<\/b><br\/><\/small>\n<\/span>\n<span style=\"display:inline-block;vertical-align:top;\">\n<a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_800\/docs\/news_moto_185.jpg\" target =\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/h_125\/docs\/news_moto_185.jpg\" alt=\"News image - original\" title=\"News image - original\" style=\"margin-right: 30px;display:block;\" \/><\/a>\n<small><b style=\"margin-right: 30px;display:block;\">original<\/b><\/small>\n<\/span>\n<span style=\"display:inline-block;vertical-align:top;\">\n<a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_fill,ar_1,w_800\/docs\/news_motorcycle_185.jpg\" target =\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_fill,ar_1,h_125\/docs\/news_motorcycle_185.jpg\" alt=\"News image with center cropping\" title=\"News image with center cropping\" style=\"margin-right: 30px;display:block;\" \/><\/a>\n<small><b style=\"margin-right: 30px;display:block;\">center crop<\/b><\/small>\n<\/span>\n<span style=\"display:inline-block;vertical-align:top;\">\n<a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/g_auto,c_fill,ar_1,w_800\/docs\/news_motorcycle_185.jpg\" target =\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/g_auto,c_fill,ar_1,h_125\/docs\/news_motorcycle_185.jpg\" alt=\"News image with subject detection cropping\" title=\"News image with subject detection cropping\" style=\"margin-right: 30px;display:block;\" \/><\/a>\n<small><b style=\"margin-right: 30px;display:block;\">g_auto crop<\/b><br\/><\/small>\n<\/span>\n<span style=\"display:inline-block;vertical-align:top;\">\n<a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_800\/docs\/cat_yellow_leaves_185.jpg\" target =\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/h_125\/docs\/cat_yellow_leaves_185.jpg\" alt=\"Cat image - original\" title=\"Cat image - original\" style=\"margin-right: 30px;display:block;\" \/><\/a>\n<small><b style=\"margin-right: 30px;display:block;\">original<\/b><\/small>\n<\/span>\n<span style=\"display:inline-block;vertical-align:top;\">\n<a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_fill,ar_1,w_800\/docs\/cat_yellow_leaves_185.jpg\" target =\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_fill,ar_1,h_125\/docs\/cat_yellow_leaves_185.jpg\" alt=\"Cat image with center cropping\" title=\"Cat image with center cropping\" style=\"margin-right: 30px;display:block;\" \/><\/a>\n<small><b style=\"margin-right: 30px;display:block;\">center crop<\/b><\/small>\n<\/span>\n<span style=\"display:inline-block;vertical-align:top;\">\n<a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/g_auto,c_fill,ar_1,w_800\/docs\/cat_yellow_leaves_185.jpg\" target =\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/g_auto,c_fill,ar_1,h_125\/docs\/cat_yellow_leaves_185.jpg\" alt=\"Cat image with subject detection cropping\" title=\"Cat image with subject detection cropping\" style=\"margin-right: 30px;display:block;\" \/><\/a>\n<small><b style=\"margin-right: 30px;display:block;\">g_auto crop<\/b><\/small>\n<\/span>\n<\/div>\n<div style=\"clear: both; margin-bottom: 20px\">\n<\/div>\n<p>How do you apply this cool cropping method on your delivered images? After uploading your original image to your Cloudinary account, just specify <code>auto<\/code> as the <code>gravity<\/code> (area to keep) in your on-the-fly delivery URL, along with a crop mode such as <a href=\"https:\/\/cloudinary.com\/documentation\/image_transformations#fill\">fill<\/a>, <a href=\"https:\/\/cloudinary.com\/documentation\/image_transformations#lfill_limit_fill\">lfill<\/a>, or <a href=\"https:\/\/cloudinary.com\/documentation\/image_transformations#crop\">crop<\/a>, and of-course an aspect ratio or width\/height combination that\u2019s different than the original.<\/p>\n<p>For example, here\u2019s how you\u2019d deliver that nicely cropped cat above as a 500px square (1.0 aspect ratio or <code>ar_1<\/code> in the delivery URL):<\/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;docs\\\/cat_yellow_leaves2.jpg\\&quot;, {gravity: \\&quot;auto\\&quot;, aspect_ratio: \\&quot;1\\&quot;, width: 500, crop: \\&quot;fill\\&quot;})&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;, {gravity: \\&quot;auto\\&quot;, aspect_ratio: \\&quot;1\\&quot;, width: 500, crop: \\&quot;fill\\&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;docs\\\/cat_yellow_leaves2.jpg\\&quot;).resize(\\n  fill()\\n    .width(500)\\n    .aspectRatio(\\&quot;1.0\\&quot;)\\n    .gravity(autoGravity())\\n);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;).resize(\\n  fill()\\n    .width(500)\\n    .aspectRatio(\\&quot;1.0\\&quot;)\\n    .gravity(autoGravity())\\n);&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;docs\\\/cat_yellow_leaves2.jpg\\&quot; &gt; &lt;Transformation gravity=\\&quot;auto\\&quot; aspectRatio=\\&quot;1\\&quot; width=\\&quot;500\\&quot; crop=\\&quot;fill\\&quot; \\\/&gt; &lt;\\\/Image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;Image publicId=\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot; &gt;\\n\\t&lt;Transformation gravity=\\&quot;auto\\&quot; aspectRatio=\\&quot;1\\&quot; width=\\&quot;500\\&quot; crop=\\&quot;fill\\&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;docs\\\/cat_yellow_leaves2.jpg\\&quot;).resize(\\n  fill()\\n    .width(500)\\n    .aspectRatio(\\&quot;1.0\\&quot;)\\n    .gravity(autoGravity())\\n);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;).resize(\\n  fill()\\n    .width(500)\\n    .aspectRatio(\\&quot;1.0\\&quot;)\\n    .gravity(autoGravity())\\n);&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;docs\\\/cat_yellow_leaves2.jpg\\&quot; &gt; &lt;cld-transformation gravity=\\&quot;auto\\&quot; aspect-ratio=\\&quot;1\\&quot; width=\\&quot;500\\&quot; crop=\\&quot;fill\\&quot; \\\/&gt; &lt;\\\/cld-image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;cld-image public-id=\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot; &gt;\\n\\t&lt;cld-transformation gravity=\\&quot;auto\\&quot; aspect-ratio=\\&quot;1\\&quot; width=\\&quot;500\\&quot; crop=\\&quot;fill\\&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;docs\\\/cat_yellow_leaves2.jpg\\&quot;).resize(\\n  fill()\\n    .width(500)\\n    .aspectRatio(\\&quot;1.0\\&quot;)\\n    .gravity(autoGravity())\\n);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;).resize(\\n  fill()\\n    .width(500)\\n    .aspectRatio(\\&quot;1.0\\&quot;)\\n    .gravity(autoGravity())\\n);&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;docs\\\/cat_yellow_leaves2.jpg\\&quot; &gt; &lt;cl-transformation gravity=\\&quot;auto\\&quot; aspect-ratio=\\&quot;1\\&quot; width=\\&quot;500\\&quot; crop=\\&quot;fill\\&quot;&gt; &lt;\\\/cl-transformation&gt; &lt;\\\/cl-image&gt;&quot;,&quot;codeSnippet&quot;:&quot;&lt;cl-image public-id=\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot; &gt;\\n\\t&lt;cl-transformation gravity=\\&quot;auto\\&quot; aspect-ratio=\\&quot;1\\&quot; width=\\&quot;500\\&quot; crop=\\&quot;fill\\&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;docs\\\/cat_yellow_leaves2.jpg\\&quot;).resize(\\n  fill()\\n    .width(500)\\n    .aspectRatio(\\&quot;1.0\\&quot;)\\n    .gravity(autoGravity())\\n);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;).resize(\\n  fill()\\n    .width(500)\\n    .aspectRatio(\\&quot;1.0\\&quot;)\\n    .gravity(autoGravity())\\n);&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;docs\\\/cat_yellow_leaves2.jpg&#039;, {gravity: \\&quot;auto\\&quot;, aspectRatio: \\&quot;1\\&quot;, width: 500, crop: \\&quot;fill\\&quot;}).toHtml();&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.imageTag(&#039;docs\\\/cat_yellow_leaves2.jpg&#039;, {gravity: \\&quot;auto\\&quot;, aspectRatio: \\&quot;1\\&quot;, width: 500, crop: \\&quot;fill\\&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;docs\\\/cat_yellow_leaves2.jpg\\&quot;).image(gravity=\\&quot;auto\\&quot;, aspect_ratio=\\&quot;1\\&quot;, width=500, crop=\\&quot;fill\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;CloudinaryImage(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;).image(gravity=\\&quot;auto\\&quot;, aspect_ratio=\\&quot;1\\&quot;, width=500, crop=\\&quot;fill\\&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;docs\\\/cat_yellow_leaves2.jpg&#039;))\\n\\t-&gt;resize(Resize::fill()-&gt;width(500)\\n-&gt;aspectRatio(1.0)\\n\\t-&gt;gravity(\\n\\tGravity::autoGravity())\\n\\t);&quot;,&quot;codeSnippet&quot;:&quot;(new ImageTag(&#039;docs\\\/cat_yellow_leaves2.jpg&#039;))\\n\\t-&gt;resize(Resize::fill()-&gt;width(500)\\n-&gt;aspectRatio(1.0)\\n\\t-&gt;gravity(\\n\\tGravity::autoGravity())\\n\\t);&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;docs\\\/cat_yellow_leaves2.jpg\\&quot;, array(\\&quot;gravity\\&quot;=&gt;\\&quot;auto\\&quot;, \\&quot;aspect_ratio\\&quot;=&gt;\\&quot;1\\&quot;, \\&quot;width\\&quot;=&gt;500, \\&quot;crop\\&quot;=&gt;\\&quot;fill\\&quot;))&quot;,&quot;codeSnippet&quot;:&quot;cl_image_tag(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;, array(\\&quot;gravity\\&quot;=&gt;\\&quot;auto\\&quot;, \\&quot;aspect_ratio\\&quot;=&gt;\\&quot;1\\&quot;, \\&quot;width\\&quot;=&gt;500, \\&quot;crop\\&quot;=&gt;\\&quot;fill\\&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().gravity(\\&quot;auto\\&quot;).aspectRatio(\\&quot;1\\&quot;).width(500).crop(\\&quot;fill\\&quot;)).imageTag(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.url().transformation(new Transformation().gravity(\\&quot;auto\\&quot;).aspectRatio(\\&quot;1\\&quot;).width(500).crop(\\&quot;fill\\&quot;)).imageTag(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Java&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;},{&quot;sdkId&quot;:&quot;ruby&quot;,&quot;framework&quot;:&quot;ruby&quot;,&quot;language&quot;:&quot;ruby&quot;,&quot;rawCodeSnippet&quot;:&quot;cl_image_tag(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;, gravity: \\&quot;auto\\&quot;, aspect_ratio: \\&quot;1\\&quot;, width: 500, crop: \\&quot;fill\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;cl_image_tag(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;, gravity: \\&quot;auto\\&quot;, aspect_ratio: \\&quot;1\\&quot;, width: 500, crop: \\&quot;fill\\&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().Gravity(\\&quot;auto\\&quot;).AspectRatio(\\&quot;1\\&quot;).Width(500).Crop(\\&quot;fill\\&quot;)).BuildImageTag(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.Api.UrlImgUp.Transform(new Transformation().Gravity(\\&quot;auto\\&quot;).AspectRatio(\\&quot;1\\&quot;).Width(500).Crop(\\&quot;fill\\&quot;)).BuildImageTag(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;.NET&quot;,&quot;packageName&quot;:&quot;CloudinaryDotNet&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;dart&quot;,&quot;framework&quot;:&quot;dart&quot;,&quot;language&quot;:&quot;dart&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image(&#039;docs\\\/cat_yellow_leaves2.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.fill().width(500)\\n.aspectRatio(&#039;1.0&#039;)\\n\\t.gravity(\\n\\tGravity.autoGravity())\\n\\t));&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(&#039;docs\\\/cat_yellow_leaves2.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.fill().width(500)\\n.aspectRatio(&#039;1.0&#039;)\\n\\t.gravity(\\n\\tGravity.autoGravity())\\n\\t));&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Dart&quot;,&quot;packageName&quot;:&quot;cloudinary_dart&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;},{&quot;sdkId&quot;:&quot;swift&quot;,&quot;framework&quot;:&quot;swift&quot;,&quot;language&quot;:&quot;swift&quot;,&quot;rawCodeSnippet&quot;:&quot;imageView.cldSetImage(cloudinary.createUrl().setTransformation(CLDTransformation().setGravity(\\&quot;auto\\&quot;).setAspectRatio(\\&quot;1\\&quot;).setWidth(500).setCrop(\\&quot;fill\\&quot;)).generate(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;)!, cloudinary: cloudinary)&quot;,&quot;codeSnippet&quot;:&quot;imageView.cldSetImage(cloudinary.createUrl().setTransformation(CLDTransformation().setGravity(\\&quot;auto\\&quot;).setAspectRatio(\\&quot;1\\&quot;).setWidth(500).setCrop(\\&quot;fill\\&quot;)).generate(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;)!, cloudinary: cloudinary)&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;iOS&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;5.x&quot;},{&quot;sdkId&quot;:&quot;android&quot;,&quot;framework&quot;:&quot;android&quot;,&quot;language&quot;:&quot;android&quot;,&quot;rawCodeSnippet&quot;:&quot;MediaManager.get().url().transformation(new Transformation().gravity(\\&quot;auto\\&quot;).aspectRatio(\\&quot;1\\&quot;).width(500).crop(\\&quot;fill\\&quot;)).generate(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;);&quot;,&quot;codeSnippet&quot;:&quot;MediaManager.get().url().transformation(new Transformation().gravity(\\&quot;auto\\&quot;).aspectRatio(\\&quot;1\\&quot;).width(500).crop(\\&quot;fill\\&quot;)).generate(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;Android&quot;,&quot;packageName&quot;:&quot;cloudinary-android&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;3.x&quot;},{&quot;sdkId&quot;:&quot;flutter&quot;,&quot;framework&quot;:&quot;flutter&quot;,&quot;language&quot;:&quot;flutter&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.image(&#039;docs\\\/cat_yellow_leaves2.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.fill().width(500)\\n.aspectRatio(&#039;1.0&#039;)\\n\\t.gravity(\\n\\tGravity.autoGravity())\\n\\t));&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image(&#039;docs\\\/cat_yellow_leaves2.jpg&#039;).transformation(Transformation()\\n\\t.resize(Resize.fill().width(500)\\n.aspectRatio(&#039;1.0&#039;)\\n\\t.gravity(\\n\\tGravity.autoGravity())\\n\\t));&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;docs\\\/cat_yellow_leaves2.jpg\\&quot;)\\n\\t resize(Resize.fill() { width(500)\\n aspectRatio(1.0F)\\n\\t gravity(\\n\\tGravity.autoGravity())\\n\\t }) \\n}.generate()&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.image {\\n\\tpublicId(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;)\\n\\t resize(Resize.fill() { width(500)\\n aspectRatio(1.0F)\\n\\t gravity(\\n\\tGravity.autoGravity())\\n\\t }) \\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;docs\\\/cat_yellow_leaves2.jpg\\&quot;, {gravity: \\&quot;auto\\&quot;, aspect_ratio: \\&quot;1\\&quot;, width: 500, crop: \\&quot;fill\\&quot;})&quot;,&quot;codeSnippet&quot;:&quot;$.cloudinary.image(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;, {gravity: \\&quot;auto\\&quot;, aspect_ratio: \\&quot;1\\&quot;, width: 500, crop: \\&quot;fill\\&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;docs\\\/cat_yellow_leaves2.jpg\\&quot;).resize(\\n  fill()\\n    .width(500)\\n    .aspectRatio(\\&quot;1.0\\&quot;)\\n    .gravity(autoGravity())\\n);&quot;,&quot;codeSnippet&quot;:&quot;new CloudinaryImage(\\&quot;docs\\\/cat_yellow_leaves2.jpg\\&quot;).resize(\\n  fill()\\n    .width(500)\\n    .aspectRatio(\\&quot;1.0\\&quot;)\\n    .gravity(autoGravity())\\n);&quot;,&quot;status&quot;:0,&quot;statusText&quot;:&quot;Ok&quot;,&quot;displayName&quot;:&quot;React Native&quot;,&quot;packageName&quot;:&quot;cloudinary-react-native&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;}]\"\n      parsed-url=\"{&quot;url&quot;:&quot;https:\\\/\\\/res.cloudinary.com\\\/demo\\\/image\\\/upload\\\/g_auto,c_fill,ar_1,w_500\\\/docs\\\/cat_yellow_leaves2.jpg&quot;,&quot;cloud_name&quot;:&quot;demo&quot;,&quot;host&quot;:&quot;res.cloudinary.com&quot;,&quot;type&quot;:&quot;upload&quot;,&quot;resource_type&quot;:&quot;image&quot;,&quot;transformation&quot;:[{&quot;gravity&quot;:&quot;auto&quot;,&quot;crop_mode&quot;:&quot;fill&quot;,&quot;aspect_ratio&quot;:&quot;1&quot;,&quot;width&quot;:&quot;500&quot;}],&quot;transformation_string&quot;:&quot;g_auto,c_fill,ar_1,w_500&quot;,&quot;url_suffix&quot;:&quot;&quot;,&quot;version&quot;:null,&quot;secure&quot;:true,&quot;public_id&quot;:&quot;docs\\\/cat_yellow_leaves2.jpg&quot;,&quot;extension&quot;:&quot;jpg&quot;,&quot;format&quot;:&quot;jpg&quot;,&quot;format_code&quot;:true,&quot;url_code&quot;:false,&quot;signature&quot;:&quot;&quot;,&quot;private_cdn&quot;:false,&quot;result_asset_type&quot;:&quot;image&quot;}\"\n      with-url=\"true\"\n    >\n      <span class=\"u-visually-hidden\">Loading code examples<\/span>\n    <\/cld-code-widget><\/p>\n<p>\nIn addition to Cloudinary, there are other AI image croppers available in the market. For instance:\n<\/p>\n<p>\n<strong>AI Cropper: <\/strong>A web browser application that allows you to crop AI files on your phone, tablet, or desktop. It doesn&#8217;t add any watermarks or dates to your photos.\n<\/p>\n<p>\n<strong>PhotoAiD:<\/strong> A free online image cropper that&#8217;s part of a complex photo editor. You can use it to crop photos specifically for platforms like Facebook or for a CV.\n<\/p>\n<p>\n<strong>Magic Crop:<\/strong> This website uses AI and the rule of thirds to automatically crop inputted pictures into perfect square headshots. It can even batch-crop multiple images, offering a more efficient solution for those with a large number of photos to process.\n<\/p>\n<p>\nMoreover, traditional image editing software like Adobe Photoshop, GIMP, or Pixlr can also be used to resize images without losing quality, providing users with more options and flexibility in their image editing tasks.\n<\/p>\n<p>Read more in our guides on image cropping:<\/p>\n<ul>\n<li>\n<a href=\"https:\/\/cloudinary.com\/guides\/automatic-image-cropping\/auto-image-crop-use-cases-features-and-best-practices\">Auto Image Crop: Use Cases, Features, and Best Practices<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/guides\/automatic-image-cropping\/5-ways-to-crop-images-in-html-css\">5 Ways to Crop Images in HTML\/CSS<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/guides\/automatic-image-cropping\/cropping-images-in-python-with-pillow-and-opencv\">Cropping Images in Python With Pillow and OpenCV<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/guides\/automatic-image-cropping\/cropping-images-in-javascript\">Cropping Images in JavaScript<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/introducing_smart_cropping_intelligent_quality_selection_and_automated_responsive_images\">Smart Cropping, Intelligent Quality Selection, and Automated Responsive Images<\/a>\n<\/li>\n<\/ul>\n<h2>Classic Or Subject?<\/h2>\n<p>This latest addition to Cloudinary\u2019s growing set of machine learning capabilities analyzes the image as a whole, rather than the pixel by pixel analysis that\u2019s applied in our classic auto-cropping feature.<\/p>\n<p>In the majority of cases, the classic saliency algorithms and our new subject-detection method will provide the same or very similar results. But when processing the vast number of auto-crops that Cloudinary handles every day, there are some cases where we felt we could provide even better results. For example, the new subject-detection algorithm can be more reliable in cases where the true main subject of the photo would otherwise have to compete with elements like sunlight, faces, or other large areas of color contrast that are not actually central to the \u2018story\u2019 of the image.<\/p>\n<p>For example, the classic auto-cropping algorithm gives increased priority to the bright contrasts of the leaves against the sky, and thus in this case, doesn\u2019t keep the girl when the aspect ratio is changed significantly. But the artificial intelligence algorithm emulates what our intuition tells us, and the automatic crop is right on target.<\/p>\n<div style=\"clear: both; margin-bottom: 20px\">\n<\/div>\n<div style=\"text-align:center;\">\n<span style=\"display:inline-block;vertical-align:top;\">\n<a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/docs\/girl_leaves.jpg\" target =\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/h_200\/docs\/girl_leaves.jpg\" alt=\"Original\" title=\"Original\" style=\"margin-right: 30px;display:block;\" \/><\/a>\n<small><b style=\"margin-right: 30px;display:block;\">Original<\/b><\/small>\n<\/span>\n<span style=\"display:inline-block;vertical-align:top;\">\n<a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_fill,h_ih,ar_0.56,g_auto:classic\/docs\/girl_leaves.jpg\" target =\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_fill,h_ih,ar_0.56,g_auto:classic\/h_200\/docs\/girl_leaves.jpg\" alt=\"Original\" title=\"Original\" style=\"margin-right: 30px;display:block;\" \/><\/a>\n<small><b style=\"margin-right: 30px;display:block;\">Classic auto-crop<\/b><\/small>\n<\/span>\n<span style=\"display:inline-block;vertical-align:top;\">\n<a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_fill,h_ih,ar_0.56,g_auto\/docs\/girl_leaves.jpg\" target =\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_fill,h_ih,ar_0.56,g_auto\/h_200\/docs\/girl_leaves.jpg\" alt=\"Original\" title=\"Original\" style=\"margin-right: 30px;display:block;\" \/><\/a>\n<small><b style=\"margin-right: 30px;display:block;\">New auto-crop<\/b><\/small>\n<\/span>\n<\/div>\n<div style=\"clear: both; margin-bottom: 20px\">\n<\/div>\n<p>Just a quick note here, that in order to get the best of all worlds, the default <code>g_auto<\/code> parameter now applies a combination of the subject and classic algorithms (more heavily leaning towards the subject results). But you can always proactively request either the classic or subject mechanism with any crop mode using <code>auto:classic<\/code> or <code>auto:subject<\/code> as the <strong>gravity<\/strong> (<code>g_<\/code>) value.<\/p>\n<h2>Auto-Cropping and Responsive Art Direction<\/h2>\n<p>The value of great image auto-cropping really comes into play when you start thinking about delivering the same image in different devices.<\/p>\n<p>Organizations who need to play it safe tend to just scale down their original image and deliver the same thing regardless of the device viewport aspect ratio. But that means you really sacrifice on the detail, when on smaller screens or when the aspect ratios are significantly different from the original.<\/p>\n<p>When you rotate your phone between portrait and landscape, you are switching between <strong>~19:9 vs. 9:19<\/strong>, or an aspect ratio of <strong>2.1 vs. 0.47<\/strong>, while your computer screen viewers are probably using a <strong>4:3<\/strong> or <strong>16:9<\/strong> screen. Do you really want to deliver the identical image in all these views?<\/p>\n<p>In general, images that fill the device viewport get the most engagement. But you can only go that route if you can be sure that even if 50% or more of the image may be cropped out, you\u2019ll still keep the important parts of your image in tact.<\/p>\n<p>For example, with the new <code>g_auto<\/code>, you can confidently deliver images that fill a phone\u2019s view port, even when users rotate their phones, so when viewer\u2019s rotate their phones, you can offer your viewers the more engaging option Bs rather than the tiny option As.<\/p>\n<table >\n  <tr>\n   <td rowspan=\"2\" ><div style=\"padding: 10px;text-align:center;\"> \n<a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_pad,h_ih,ar_0.48,b_lightgray\/w_350\/docs\/dog_ocean.jpg\" target =\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_pad,h_ih,ar_0.48,b_lightgray\/w_150\/docs\/dog_ocean.jpg\" alt=\"Original\" title=\"Original\" \/><\/a>\n<br\/>\n    Option A\n <\/div>  <\/td>\n   <td rowspan=\"2\" > <div style=\n   \"border: solid 0 ; border-right-width:1px; padding: 20px; text-align:center;\">\n<a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_fill,h_ih,ar_0.48,g_auto\/w_350\/docs\/dog_ocean.jpg\" target =\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_fill,h_ih,ar_0.48,g_auto\/w_150\/docs\/dog_ocean.jpg\" alt=\"Original\" title=\"Original\"  \/><\/a><br\/>\nOption B \n <\/div>  <\/td>\n   <td><div style=\"padding: 20px;text-align:center;\">\n<a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_pad,h_ih,ar_2.05,b_lightgray\/w_750\/2bugs_flower.jpg\" target =\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_pad,h_ih,ar_2.05,b_lightgray\/w_250\/2bugs_flower.jpg\" alt=\"Original\" title=\"Original\"  \/><\/a>\n<br\/>\nOption A\n  <\/div> <\/td>\n  <\/tr>\n  <tr>\n   <td><div style=\"padding: 20px;text-align:center;\">\n<a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_fill,h_ih,ar_2.05,g_auto:subject\/w_750\/2bugs_flower.jpg\" target =\"_blank\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_fill,h_ih,ar_2.05,g_auto:subject\/w_250\/2bugs_flower.jpg\" alt=\"Original\" title=\"Original\" \/><\/a>\n<br\/>\nOption B\n<\/div>   <\/td>\n  <\/tr>\n<\/table>\n<h2>When the Subject, is Subject to Change\u2026<\/h2>\n<p>Programmatically cropped images are an essential part of any web or mobile site. But when the subjects, and the location of those subjects within your images, are unpredictable, automatic cropping isn\u2019t enough. The cropping mechanism you use has to be smart enough to \u2018know\u2019 what the end users are going to want to see.  With Cloudinary\u2019s subject detection auto cropping, you can confidently deliver great photos that bring your users\u2019 attention directly to the subject at hand, from responsive view to responsive view.<\/p>\n<p>Oh, by the way, if your subject is not so likely to change, for example, suppose you are selling microwaves, umbrellas, vehicles, or food, you may want to take advantage of our new <a href=\"https:\/\/cloudinary.com\/documentation\/cloudinary_ai_content_analysis_addon\">object-aware image cropping<\/a> add-on. This add-on applies another deep learning tool that gives the highest preservation (\u201cdon\u2019t crop\u201d) priority to specific objects or categories you specify. If the specified object(s) aren\u2019t found, then (by default) the subject-detection auto-cropping algorithm described here is still applied.<\/p>\n<p>The end goal? With these smart AI algorithms, you can confidently use the same cropping transformation with virtually every image you deliver, no matter the size and layout of your images, the user\u2019s device, or your graphic design.<\/p>\n<p>The subject detection auto-cropping we\u2019ve demonstrated in this post is available with all of Cloudinary\u2019s plans; even the <a href=\"https:\/\/cloudinary.com\/users\/register\/free\">free plan<\/a>!  <br\/><\/p>\n<p>Learn more about <strong>g_auto:subject<\/strong> and all the <a href=\"https:\/\/cloudinary.com\/documentation\/image_transformations#automatic_cropping\">automatic cropping options <\/a>in our docs.<\/p>\n<h2>See Our Additional Guides on Key Machine Learning Topics<\/h2>\n<p>Together with our content partners, we have authored in-depth guides on several other topics that can also be useful as you explore the world of <a href=\"https:\/\/www.aporia.com\/learn\/machine-learning-model\/machine-learning-models-use-cases-operations\/\">machine learning<\/a>.<\/p>\n<h3><a href=\"https:\/\/cloudinary.com\/guides\/bulk-image-resize\/bulk-image-resize-in-css-javascript-python-java-node-js-and-other-languages\">Bulk Image Resize<\/a><\/h3>\n<ul>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/image_resizing_manually_with_css_and_automatically_with_cloudinary\">Image Resizing: Manually With CSS and Automatically With Cloudinary<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/guides\/bulk-image-resize\/python-image-resize-with-pillow-and-opencv\">Python Image Resize With Pillow and OpenCV<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/guides\/bulk-image-resize\/3-ways-to-resize-images-in-java\">3 Ways to Resize Images in Java<\/a>\n<\/li>\n<\/ul>\n<h3>Final note<\/h3>\n<p>\nSpeaking of image cropping, tools like Adobe Illustrator also offer functionalities for this purpose. You can use the Crop Image button in Adobe Illustrator to crop an image. To use this feature:\n<\/p>\n<ul>\n<li>Select the image with the Selection Tool.\n<li>Click the Crop Image button on the upper toolbar.\n<li>Drag the corners of the bounding box to crop the image.\n<li>Use the keyboard shortcuts Ctrl+7 (Win) or Command+7 (Mac).\n<\/li>\n<\/ul>\n<p>\nAdditionally, Illustrator provides an alternative method known as the clipping mask to crop images. To use the clipping mask method:\n<\/p>\n<ul>\n<li>Select the image and the shape.\n<li>Choose Object > Clipping Mask > Make.\n<\/li>\n<\/ul>\n<p>\nIt&#8217;s worth noting that the Crop Image button won&#8217;t appear in the tool panel if no image is selected. Also, if you try to transform an image after selecting the Crop Image option, Illustrator will exit the cropping interface.\n<\/p>\n<h3>Machine Learning Engineering<\/h3>\n<p><em>Authored by Aporia<\/em><\/p>\n<ul>\n<li>\n<a href=\"https:\/\/www.aporia.com\/learn\/machine-learning-for-business\/introducing-mlops-toys\/\">Introducing MLOps.toys &#8211; Aporia<\/a>\n<\/li>\n<\/ul>\n<h3><a href=\"https:\/\/datagen.tech\/guides\/image-annotation\/image-annotation\/\">Image Annotation<\/a><\/h3>\n<p><em>Authored by Datagen<\/em><\/p>\n<ul>\n<li>\n<a href=\"https:\/\/datagen.tech\/guides\/image-annotation\/image-labeling\/\">Image Labeling in Computer Vision: A Practical Guide<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/datagen.tech\/guides\/image-annotation\/image-annotation-tool\/\">5 Image Annotation Tools to Get Your Labeling Project Started<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/datagen.tech\/guides\/image-annotation\/labelme\/\">Labelme: the Basics and a Quick Image Segmentation Tutorial<\/a>\n<\/li>\n<\/ul>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":41,"featured_media":21870,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[336,426,165],"class_list":["post-21869","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-ai","tag-featured","tag-image-transformation"],"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>AI-Based Image Auto-Crop Algorithm Sticks to the Subject<\/title>\n<meta name=\"description\" content=\"Deep learning subject detection algorithm makes Cloudinary&#039;s g_auto even better. Get just the right automatic crop on every image for every responsive view.\" \/>\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\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"New AI-Based Image Auto-Crop Algorithm Sticks to the Subject\" \/>\n<meta property=\"og:description\" content=\"Deep learning subject detection algorithm makes Cloudinary&#039;s g_auto even better. Get just the right automatic crop on every image for every responsive view.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-02-15T10:35:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-21T19:19:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719806\/Web_Assets\/blog\/g_auto_subject\/g_auto_subject.jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"1540\" \/>\n\t<meta property=\"og:image:height\" content=\"847\" \/>\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\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"New AI-Based Image Auto-Crop Algorithm Sticks to the Subject\",\"datePublished\":\"2020-02-15T10:35:00+00:00\",\"dateModified\":\"2025-08-21T19:19:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject\"},\"wordCount\":9,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719806\/Web_Assets\/blog\/g_auto_subject\/g_auto_subject.jpg?_i=AA\",\"keywords\":[\"AI\",\"Featured\",\"Image Transformation\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2020\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject\",\"url\":\"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject\",\"name\":\"AI-Based Image Auto-Crop Algorithm Sticks to the Subject\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719806\/Web_Assets\/blog\/g_auto_subject\/g_auto_subject.jpg?_i=AA\",\"datePublished\":\"2020-02-15T10:35:00+00:00\",\"dateModified\":\"2025-08-21T19:19:19+00:00\",\"description\":\"Deep learning subject detection algorithm makes Cloudinary's g_auto even better. Get just the right automatic crop on every image for every responsive view.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719806\/Web_Assets\/blog\/g_auto_subject\/g_auto_subject.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719806\/Web_Assets\/blog\/g_auto_subject\/g_auto_subject.jpg?_i=AA\",\"width\":1540,\"height\":847},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"New AI-Based Image Auto-Crop Algorithm Sticks to the Subject\"}]},{\"@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":"AI-Based Image Auto-Crop Algorithm Sticks to the Subject","description":"Deep learning subject detection algorithm makes Cloudinary's g_auto even better. Get just the right automatic crop on every image for every responsive view.","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\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject","og_locale":"en_US","og_type":"article","og_title":"New AI-Based Image Auto-Crop Algorithm Sticks to the Subject","og_description":"Deep learning subject detection algorithm makes Cloudinary's g_auto even better. Get just the right automatic crop on every image for every responsive view.","og_url":"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject","og_site_name":"Cloudinary Blog","article_published_time":"2020-02-15T10:35:00+00:00","article_modified_time":"2025-08-21T19:19:19+00:00","og_image":[{"width":1540,"height":847,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719806\/Web_Assets\/blog\/g_auto_subject\/g_auto_subject.jpg?_i=AA","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject"},"author":{"name":"","@id":""},"headline":"New AI-Based Image Auto-Crop Algorithm Sticks to the Subject","datePublished":"2020-02-15T10:35:00+00:00","dateModified":"2025-08-21T19:19:19+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject"},"wordCount":9,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719806\/Web_Assets\/blog\/g_auto_subject\/g_auto_subject.jpg?_i=AA","keywords":["AI","Featured","Image Transformation"],"inLanguage":"en-US","copyrightYear":"2020","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject","url":"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject","name":"AI-Based Image Auto-Crop Algorithm Sticks to the Subject","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719806\/Web_Assets\/blog\/g_auto_subject\/g_auto_subject.jpg?_i=AA","datePublished":"2020-02-15T10:35:00+00:00","dateModified":"2025-08-21T19:19:19+00:00","description":"Deep learning subject detection algorithm makes Cloudinary's g_auto even better. Get just the right automatic crop on every image for every responsive view.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719806\/Web_Assets\/blog\/g_auto_subject\/g_auto_subject.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719806\/Web_Assets\/blog\/g_auto_subject\/g_auto_subject.jpg?_i=AA","width":1540,"height":847},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/new_ai_based_image_auto_crop_algorithm_sticks_to_the_subject#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"New AI-Based Image Auto-Crop Algorithm Sticks to the Subject"}]},{"@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\/v1649719806\/Web_Assets\/blog\/g_auto_subject\/g_auto_subject.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21869","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=21869"}],"version-history":[{"count":13,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21869\/revisions"}],"predecessor-version":[{"id":34109,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21869\/revisions\/34109"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/21870"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=21869"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=21869"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=21869"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}