Cloudinary Blog

Cloudinary’s most popular image processing add-ons

Our most popular add-ons and how to utilize them

Perhaps some of you readers that have been around for a while remember our add-ons launch 2 years back, when we introduced a number of third party image processing products, fully integrated into the Cloudinary image management pipeline. Since then our add-ons marketplace has grown, both in our offerings and in usage. We now have 11 add-ons offering various capabilities and improvements.

I decided to take a peek and see which of our add-ons are most frequently used and popular amongst our customers.

Advanced Facial Attribute Detection

Firstly, we have our Advanced Facial Attribute Detection add-on. The ‘Face API' of Microsoft's Cognitive Services allows you to accurately and automatically detect eyes, nose and other facial attributes in your photos. An in depth blog post describing this powerful add-on is coming up in the next couple of weeks, so stay tuned :)

For example:

Ruby:
cl_image_tag("cloudinary_team.jpg", :transformation=>[
  {:overlay=>"santa_hat", :effect=>"trim"},
  {:gravity=>"north_east", :width=>1.0, :height=>2.3, :crop=>"lpad"},
  {:gravity=>"adv_eyes", :flags=>["region_relative", "layer_apply"], :width=>2.6, :crop=>"scale"},
  {:width=>500, :crop=>"scale"}
  ])
PHP:
cl_image_tag("cloudinary_team.jpg", array("transformation"=>array(
  array("overlay"=>"santa_hat", "effect"=>"trim"),
  array("gravity"=>"north_east", "width"=>1.0, "height"=>2.3, "crop"=>"lpad"),
  array("gravity"=>"adv_eyes", "flags"=>array("region_relative", "layer_apply"), "width"=>2.6, "crop"=>"scale"),
  array("width"=>500, "crop"=>"scale")
  )))
Python:
CloudinaryImage("cloudinary_team.jpg").image(transformation=[
  {'overlay': "santa_hat", 'effect': "trim"},
  {'gravity': "north_east", 'width': 1.0, 'height': 2.3, 'crop': "lpad"},
  {'gravity': "adv_eyes", 'flags': ["region_relative", "layer_apply"], 'width': 2.6, 'crop': "scale"},
  {'width': 500, 'crop': "scale"}
  ])
Node.js:
cloudinary.image("cloudinary_team.jpg", {transformation: [
  {overlay: "santa_hat", effect: "trim"},
  {gravity: "north_east", width: "1.0", height: "2.3", crop: "lpad"},
  {gravity: "adv_eyes", flags: ["region_relative", "layer_apply"], width: "2.6", crop: "scale"},
  {width: 500, crop: "scale"}
  ]})
Java:
cloudinary.url().transformation(new Transformation()
  .overlay(new Layer().publicId("santa_hat")).effect("trim").chain()
  .gravity("north_east").width(1.0).height(2.3).crop("lpad").chain()
  .gravity("adv_eyes").flags("region_relative", "layer_apply").width(2.6).crop("scale").chain()
  .width(500).crop("scale")).imageTag("cloudinary_team.jpg");
JS:
cloudinary.imageTag('cloudinary_team.jpg', {transformation: [
  {overlay: new cloudinary.Layer().publicId("santa_hat"), effect: "trim"},
  {gravity: "north_east", width: "1.0", height: "2.3", crop: "lpad"},
  {gravity: "adv_eyes", flags: ["region_relative", "layer_apply"], width: "2.6", crop: "scale"},
  {width: 500, crop: "scale"}
  ]}).toHtml();
jQuery:
$.cloudinary.image("cloudinary_team.jpg", {transformation: [
  {overlay: new cloudinary.Layer().publicId("santa_hat"), effect: "trim"},
  {gravity: "north_east", width: "1.0", height: "2.3", crop: "lpad"},
  {gravity: "adv_eyes", flags: ["region_relative", "layer_apply"], width: "2.6", crop: "scale"},
  {width: 500, crop: "scale"}
  ]})
React:
<Image publicId="cloudinary_team.jpg" >
  <Transformation overlay="santa_hat" effect="trim" />
  <Transformation gravity="north_east" width="1.0" height="2.3" crop="lpad" />
  <Transformation gravity="adv_eyes" flags={["region_relative", "layer_apply"]} width="2.6" crop="scale" />
  <Transformation width="500" crop="scale" />
</Image>
Angular:
<cl-image public-id="cloudinary_team.jpg" >
  <cl-transformation overlay="santa_hat" effect="trim">
  </cl-transformation>
  <cl-transformation gravity="north_east" width="1.0" height="2.3" crop="lpad">
  </cl-transformation>
  <cl-transformation gravity="adv_eyes" flags={{["region_relative", "layer_apply"]}} width="2.6" crop="scale">
  </cl-transformation>
  <cl-transformation width="500" crop="scale">
  </cl-transformation>
</cl-image>
.Net:
cloudinary.Api.UrlImgUp.Transform(new Transformation()
  .Overlay(new Layer().PublicId("santa_hat")).Effect("trim").Chain()
  .Gravity("north_east").Width(1.0).Height(2.3).Crop("lpad").Chain()
  .Gravity("adv_eyes").Flags("region_relative", "layer_apply").Width(2.6).Crop("scale").Chain()
  .Width(500).Crop("scale")).BuildImageTag("cloudinary_team.jpg")
Android:
MediaManager.get().url().transformation(new Transformation()
  .overlay(new Layer().publicId("santa_hat")).effect("trim").chain()
  .gravity("north_east").width(1.0).height(2.3).crop("lpad").chain()
  .gravity("adv_eyes").flags("region_relative", "layer_apply").width(2.6).crop("scale").chain()
  .width(500).crop("scale")).generate("cloudinary_team.jpg");
iOS:
imageView.cldSetImage(cloudinary.createUrl().setTransformation(CLDTransformation()
  .setOverlay("santa_hat").setEffect("trim").chain()
  .setGravity("north_east").setWidth(1.0).setHeight(2.3).setCrop("lpad").chain()
  .setGravity("adv_eyes").setFlags("region_relative", "layer_apply").setWidth(2.6).setCrop("scale").chain()
  .setWidth(500).setCrop("scale")).generate("cloudinary_team.jpg")!, cloudinary: cloudinary)
Image with hat overlay automatically placed above all faces detected

JPEGmini

Our second most popular add-on, the JPEGmini image optimization add-on, is an add-on that helps reduce the file size of your photos by up to 5x, while keeping their original quality and JPEG format. Any Cloudinary image manipulation can be chained as well of course. When using the JPEGmini add-on, your images will be automatically optimized using advanced visual algorithms achieving maximum file size reduction while maintaining a very high visual quality. This seems like a no-brainer to me - who wouldn’t want their images automatically optimized in such a manner?? You can also read more about this add-on in this blog post.

For example:

Ruby:
cl_image_tag("tomatoes_cooking.jpg", :quality=>"jpegmini:2", :width=>500, :crop=>"scale")
PHP:
cl_image_tag("tomatoes_cooking.jpg", array("quality"=>"jpegmini:2", "width"=>500, "crop"=>"scale"))
Python:
CloudinaryImage("tomatoes_cooking.jpg").image(quality="jpegmini:2", width=500, crop="scale")
Node.js:
cloudinary.image("tomatoes_cooking.jpg", {quality: "jpegmini:2", width: 500, crop: "scale"})
Java:
cloudinary.url().transformation(new Transformation().quality("jpegmini:2").width(500).crop("scale")).imageTag("tomatoes_cooking.jpg");
JS:
cloudinary.imageTag('tomatoes_cooking.jpg', {quality: "jpegmini:2", width: 500, crop: "scale"}).toHtml();
jQuery:
$.cloudinary.image("tomatoes_cooking.jpg", {quality: "jpegmini:2", width: 500, crop: "scale"})
React:
<Image publicId="tomatoes_cooking.jpg" >
  <Transformation quality="jpegmini:2" width="500" crop="scale" />
</Image>
Angular:
<cl-image public-id="tomatoes_cooking.jpg" >
  <cl-transformation quality="jpegmini:2" width="500" crop="scale">
  </cl-transformation>
</cl-image>
.Net:
cloudinary.Api.UrlImgUp.Transform(new Transformation().Quality("jpegmini:2").Width(500).Crop("scale")).BuildImageTag("tomatoes_cooking.jpg")
Android:
MediaManager.get().url().transformation(new Transformation().quality("jpegmini:2").width(500).crop("scale")).generate("tomatoes_cooking.jpg");
iOS:
imageView.cldSetImage(cloudinary.createUrl().setTransformation(CLDTransformation().setQuality("jpegmini:2").setWidth(500).setCrop("scale")).generate("tomatoes_cooking.jpg")!, cloudinary: cloudinary)
Image automatically optimized with JPEGmini add-on

Imagga crop & scale

Imagga's crop & scale smart cropping technology automatically chooses the most visually appealing parts of your images and crops them accordingly, extending Cloudinary's powerful cropping capabilities with automatic cropping that is not only based on detected faces. When using the Imagga add-on, your images will be scaled and cropped based on automatically calculated areas of interest within each specific photo. This add-on was also described in this blog post.

For example:

  • Original image:
    Original image
  • Imagga scaled:
    Ruby:
    cl_image_tag("/dog_field.jpg", :height=>200, :width=>400, :crop=>"imagga_scale")
    PHP:
    cl_image_tag("/dog_field.jpg", array("height"=>200, "width"=>400, "crop"=>"imagga_scale"))
    Python:
    CloudinaryImage("/dog_field.jpg").image(height=200, width=400, crop="imagga_scale")
    Node.js:
    cloudinary.image("/dog_field.jpg", {height: 200, width: 400, crop: "imagga_scale"})
    Java:
    cloudinary.url().transformation(new Transformation().height(200).width(400).crop("imagga_scale")).imageTag("/dog_field.jpg");
    JS:
    cloudinary.imageTag('/dog_field.jpg', {height: 200, width: 400, crop: "imagga_scale"}).toHtml();
    jQuery:
    $.cloudinary.image("/dog_field.jpg", {height: 200, width: 400, crop: "imagga_scale"})
    React:
    <Image publicId="/dog_field.jpg" >
      <Transformation height="200" width="400" crop="imagga_scale" />
    </Image>
    Angular:
    <cl-image public-id="/dog_field.jpg" >
      <cl-transformation height="200" width="400" crop="imagga_scale">
      </cl-transformation>
    </cl-image>
    .Net:
    cloudinary.Api.UrlImgUp.Transform(new Transformation().Height(200).Width(400).Crop("imagga_scale")).BuildImageTag("/dog_field.jpg")
    Android:
    MediaManager.get().url().transformation(new Transformation().height(200).width(400).crop("imagga_scale")).generate("/dog_field.jpg");
    iOS:
    imageView.cldSetImage(cloudinary.createUrl().setTransformation(CLDTransformation().setHeight(200).setWidth(400).setCrop("imagga_scale")).generate("/dog_field.jpg")!, cloudinary: cloudinary)
    Image automatically scaled with Imagga add-on

Imagga auto tagging

The Imagga auto tagging add-on automatically categorizes and tags images, according to the categories detected in each image. The Imagga add-on can automatically tell you what's in a photo by returning a list of detected categories and the confidence score for each of them. User uploaded images can now be fully categorized automatically! You can read more about it in this great blog post.

Other cool add-ons

Although the add-ons described above are statistically of the highest usage amongst our customers, there are a few more that are so useful and cool, I had to highlight them as well:

VIESUS image enhancement

The VIESUS image enhancement add-on does just that, enhancing the visual quality of your photos, automatically adjusting brightness and color, restoring sharpness, removing noise and correcting for overexposure or underexposure. We speak in length about it here.

For example:

  • Original image:
    Original image
  • VIESUS enhanced:
    Ruby:
    cl_image_tag("beach_day.jpg", :effect=>"viesus_correct", :width=>400, :crop=>"scale")
    PHP:
    cl_image_tag("beach_day.jpg", array("effect"=>"viesus_correct", "width"=>400, "crop"=>"scale"))
    Python:
    CloudinaryImage("beach_day.jpg").image(effect="viesus_correct", width=400, crop="scale")
    Node.js:
    cloudinary.image("beach_day.jpg", {effect: "viesus_correct", width: 400, crop: "scale"})
    Java:
    cloudinary.url().transformation(new Transformation().effect("viesus_correct").width(400).crop("scale")).imageTag("beach_day.jpg");
    JS:
    cloudinary.imageTag('beach_day.jpg', {effect: "viesus_correct", width: 400, crop: "scale"}).toHtml();
    jQuery:
    $.cloudinary.image("beach_day.jpg", {effect: "viesus_correct", width: 400, crop: "scale"})
    React:
    <Image publicId="beach_day.jpg" >
      <Transformation effect="viesus_correct" width="400" crop="scale" />
    </Image>
    Angular:
    <cl-image public-id="beach_day.jpg" >
      <cl-transformation effect="viesus_correct" width="400" crop="scale">
      </cl-transformation>
    </cl-image>
    .Net:
    cloudinary.Api.UrlImgUp.Transform(new Transformation().Effect("viesus_correct").Width(400).Crop("scale")).BuildImageTag("beach_day.jpg")
    Android:
    MediaManager.get().url().transformation(new Transformation().effect("viesus_correct").width(400).crop("scale")).generate("beach_day.jpg");
    iOS:
    imageView.cldSetImage(cloudinary.createUrl().setTransformation(CLDTransformation().setEffect("viesus_correct").setWidth(400).setCrop("scale")).generate("beach_day.jpg")!, cloudinary: cloudinary)
    Image automatically enhanced with VIESUS add-on

WebPurify

WebPurify image moderation comes in handy in various user generated content sites, by automatically moderating all photos uploaded to your application, thus preventing adult-oriented and inappropriate images from creeping into your websites or mobile applications. Custom moderation profiles can also be defined with our assistance, making sure that whatever images you don’t want appearing on your website - will be automatically screened out. You can read more about this add-on here.

Remove The Background

Remove The Background editing add-on automatically removes any background from your photos, resulting in a transparent-background image focusing only on the main object within your photo. This is especially common in e-commerce, media, and news sites in order to place the main element of the image on either white or color backgrounds. The final result better integrates an image into a site or specific page’s graphic design. This blog post describes this add-on in detail.

Which add-ons are your favorite? Are there any additional add-ons you wish we had? We would love to get your feedback and thoughts!

Recent Blog Posts

An Eye-Opening Talk: Building Apps for the Next Billion Users in Africa

William (iChuloo) Imoh, who hails from Lagos, Nigeria, recently embarked on a U.S. speaking tour, February 20-March 12, during which he powwowed with technical and product teams and communities at such renowned enterprises as Netlify, Pluralsight, Lucidchart, Twilio, and more in Salt Lake City, Dallas, Las Vegas, and San Francisco. On March 5, he gave an enlightening talk, entitled International Developers and Development: Building for the Next Billion Users at Cloudinary in Santa Clara, California. Below is a synopsis. For details, see the related slides.

Read more
The Debut of the Cloudinary Customer Advisory Board

Focus on customers has always been Cloudinary’s mantra. Because we owe them our success, we are constantly reaching out to our customers, not just for feedback on our offerings, but also for their vision, wish list, and buy-in of what Cloudinary can do to meet their needs and make them succeed. About six months ago, it occurred to us that it would be beneficial if we could meet regularly with those who are behind innovation at our key customers—executives, product gurus, developers, content managers—to swap strategies, product roadmaps, best practices, and such. In particular, we’d like to solicit actionable feedback as a foundation for our plans of product enhancements.

Read more
Media Management With the Cloudinary-Netlify CMS Integration

Static sites and the JAMstack are quickly becoming a standard for developing safe and performant websites with an optimal workflow for developers. Netlify CMS (not to be confused with the company that created it, Netlify) is an open source content management solution that works especially with static site generators such as Gatsby, Hugo, etc... enabling content storage in your Git repository along with your code for easier versioning, multichannel publishing, and direct content updates in Git.

Read more
Vitaly Friedman's Insights on Media Conferences

Vitaly Friedman is a die-hard devotee of beautiful content. Born in Minsk, Belarus, he studied Computer Science and Mathematics in Germany, unearthing in himself a passion for typography, writing, and design in the interim. After a six-year stint as a freelance designer and developer, he co-founded Smashing Magazine, a leading online publication on web design and development. You can follow SmashingMag on Twitter @SmashingMag.

Read more