{"id":21202,"date":"2013-07-18T14:47:51","date_gmt":"2013-07-18T14:47:51","guid":{"rendered":"http:\/\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance"},"modified":"2025-11-06T16:04:16","modified_gmt":"2025-11-07T00:04:16","slug":"how_to_support_webp_images_save_bandwidth_and_improve_user_performance","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance","title":{"rendered":"WebP Example | Automatically Dynamically Deliver WebP Images by Browser"},"content":{"rendered":"<div>Modern image compression techniques have had a large impact on our lifestyle. Digital cameras can save thousands of high-quality photos on a single memory card, smartphones can quickly share high resolution images on the fly, and websites and mobile apps can show rich media quickly. All of this just couldn&#8217;t have worked if image data was stored at its original, raw form.<\/div>\n<div><\/div>\n<div><span style=\"font-weight: 400;\">In this article, we\u2019ll review how to deliver WebP images automatically to the right browsers and include a<\/span> <span style=\"font-weight: 400;\">WebP example image<\/span> <span style=\"font-weight: 400;\">to show you how<\/span><span style=\"font-weight: 400;\">.<\/span><\/div>\n<h2>JPEG, PNG, and WebP<\/h2>\n<div>Through our apps, browsers and devices, we all use the <strong>JPEG lossy format<\/strong> to manage photos efficiently and the <strong>PNG lossless format<\/strong> to deliver graphics, icons and drawings.<\/div>\n<div><\/div>\n<div>However, while video formats have gone a long way these past few years, image formats have stayed somewhat behind.<\/div>\n<div><\/div>\n<div>This changed at 2010 when Google first introduced the new <strong>WebP<\/strong> (pronounced &#8220;Weppy&#8221;) format, an open sourced <a title=\"Image Formats: Getting it Right\" href=\"https:\/\/cloudinary.com\/blog\/image_formats_getting_it_right\" target=\"_blank\" rel=\"noopener\">image format<\/a> that supports both lossy and lossless image compressions.<\/div>\n<div><\/div>\n<div>WebP generates files significantly smaller than the popular JPEG and PNG formats. WebP also supports many advanced features, such as transparencies in its lossy mode, and more eye pleasing degradation in image quality on its lower quality, higher compression settings.<\/div>\n<div><\/div>\n<div>Smaller files mean less bandwidth consumption and reduced traffic costs for your online services and better user experience with faster delivery &amp; image sharing times for users of your web sites and mobile apps.<\/div>\n<div><\/div>\n<div>In this blog post we wanted to introduce <strong>Cloudinary&#8217;s new cloud-based support for on-the-fly generation of WebP images<\/strong>.<\/div>\n<div><\/div>\n<h2>Generating Smaller Images of Equal (or Better) Quality<\/h2>\n<div>If you are already familiar with Cloudinary, you probably know that you can tell Cloudinary to do image format conversions on-the-fly simply by changing the file extension of your CDN delivered URLs.<\/div>\n<div><\/div>\n<div>Consider for example, a JPG image that was uploaded to the cloud with the public ID &#8216;sample&#8217;. Now we want to embed a 300x200px thumbnail of this image on our website.<\/div>\n<div><\/div>\n<h2>Webp Browser Support<\/h2>\n<div><\/div>\n<div>The left image below is generated by Cloudinary using the <a href=\"https:\/\/cloudinary.com\/tools\/compress-jpg\">JPG<\/a> format while the right image is generated using the <span style=\"font-weight: 400;\">WebP example image<\/span> format. Note that you need a Google Chrome browser to view the WebP image correctly.<\/div>\n<div><\/div>\n<div><strong><a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_300\/sample.jpg\" target=\"_blank\" rel=\"noopener\">&#8230;\/image\/upload\/w_300\/sample.jpg<\/a><\/strong>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<strong><a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_300\/sample.webp\" target=\"_blank\" rel=\"noopener\">&#8230;\/image\/upload\/w_300\/sample.webp<\/a><\/strong><\/div>\n<div><\/div>\n<p data-wp-editing=\"1\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_300,f_auto,q_auto\/sample.jpg\" alt=\"\" width=\"300\" height=\"200\" \/>\u00a0 \u00a0<img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_300,f_auto,q_auto\/sample.webp\" alt=\"Image of pink flowers in Webp format used as a webp example image\" width=\"300\" height=\"200\" \/><\/p>\n<div><span style=\"font-size: small; color: #808080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a027.9KB JPG \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a012.4KB WebP<\/span><\/div>\n<div><\/div>\n<div>If you check the network stats, you will notice that the <strong>JPG<\/strong> file is <strong>27.9\u2009KB<\/strong> while the <strong>WebP<\/strong> file is just <strong>12.4\u2009KB<\/strong> in size and looks almost the same. This means that we&#8217;ve just saved <span style=\"color: #bb0000;\"><strong>56%<\/strong><\/span> in bandwidth. <strong>If your website includes many images, you can save half of your traffic, get your site to load twice as fast and make your visitors happy.<\/strong><\/div>\n<div><\/div>\n<div>If you use our client libraries, either concatenate &#8216;.webp&#8217; to the public ID or set the &#8216;<strong>format<\/strong>&#8216; parameter to &#8216;<strong>webp<\/strong>&#8216;. For example, in Ruby on Rails and PHP:<\/div>\n<pre>&lt;%= cl_image_tag(\"sample.webp\", :crop =&gt; :scale, :width =&gt; 300) %&gt;\n<\/pre>\n<pre>&lt;?php echo cl_image_tag(\"sample\", array(\"format\" =&gt; \"webp\", \"width\" =&gt; 300, \n                        \"crop\" =&gt; \"scale\")); ?&gt;\n<\/pre>\n<h3><\/h3>\n<h2>Lower Image Quality Equals Smaller File Size<\/h2>\n<div>JPG and WebP are lossy formats, allowing you to control the quality of the target image.<\/div>\n<div><\/div>\n<div>There&#8217;s a clear tradeoff between the target image&#8217;s quality and its generated file size. In many cases, you will be able to considerably reduce the quality and size of your images while your users will barely notice the difference.<\/div>\n<div><\/div>\n<div>The JPEG format has noticeable artifacts in lower quality levels, especially if fine details or texts are involved. The WebP format has less noticeable artifacts but tends to generate a slightly blurry image in its lower quality settings.<\/div>\n<div><\/div>\n<div>You can test that yourself by setting Cloudinary&#8217;s &#8216;<strong>quality<\/strong>&#8216; parameter (or &#8216;<strong>q<\/strong>&#8216; for URLs) to any value between 1 to 99 (the default is 90).<\/div>\n<div><\/div>\n<div><span style=\"font-weight: 400;\">The following<\/span> <span style=\"font-weight: 400;\">WebP example image<\/span> <span style=\"font-weight: 400;\">comparison reduces the quality of the sample image to 30%. On the left there\u2019s a JPG of 30% quality and on the right a WebP of 30% quality.<\/span><\/div>\n<div><\/div>\n<div><strong><a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_300,q_30\/sample.jpg\" target=\"_blank\" rel=\"noopener\">&#8230;image\/upload\/w_300,q_30\/sample.jpg<\/a><\/strong>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0<a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_300,q_30\/sample.webp\" target=\"_blank\" rel=\"noopener\"><strong>&#8230;\/image\/upload\/w_300,q_30\/sample.webp<\/strong><\/a><\/div>\n<div><\/div>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_300,q_30\/sample.jpg\" alt=\"Image of pink flowers in JPG format at 30% quality used as a comparison against the webp sample image\" width=\"300\" height=\"200\" \/>\u00a0 \u00a0<img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_300,q_30\/sample.webp\" alt=\"Image of pink flowers in webp format at 30% quality used as a WebP example image\" width=\"300\" height=\"200\" \/><\/p>\n<div>\u00a0<span style=\"color: #808080; font-size: small;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a010.6KB JPG \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a07.1KB WebP<\/span><\/div>\n<div><\/div>\n<div>The sharp-eyed will notice the difference. On the other hand, the drastic quality reduction still resulted in an image that can be considered decent, especially when using the WebP format.<\/div>\n<div><\/div>\n<div>The <strong>JPG<\/strong> of 30% quality is <strong>10.6KB<\/strong> while the <strong>WebP<\/strong> of 30% quality is just <strong>7.1KB<\/strong> in size.<\/div>\n<div><\/div>\n<div>In this comparison, the WebP format saved 33% in size, which is very nice. It&#8217;s interesting to notice that this low quality WebP is just <span style=\"color: #bb0000;\"><strong>25%<\/strong><\/span> the size of the original JPG while delivering a comparable result, quality-wise.<\/div>\n<div><\/div>\n<div>The following Node.js and Django examples generate delivery URLs similar to the example above:<\/div>\n<pre>cloudinary.image(\"sample.webp\", { width: 300, crop: 'scale', quality: 30 });\n<\/pre>\n<pre>cloudinary.CloudinaryImage(\"sample.webp\").image(width = 300, \n                                                crop = 'scale', quality = 30)\n<\/pre>\n<h3><\/h3>\n<h2>Semi-Transparent Images<\/h2>\n<div>Recently, Facebook, Google+ and many other websites, have started to display user profile pictures with a completely circular crop. In order to display such circular images on a non-solid or changing background, the images need to be semi-transparent. The JPG format doesn&#8217;t support transparent pixels, so you might be forced to use PNG which is far from optimal for this purpose.<\/div>\n<div><\/div>\n<div>The following example uses Cloudinary to generate a circular face-detection based thumbnail in the JPG format. The <strong>JPG<\/strong> format is effective for this image and takes just <strong>13.6KB<\/strong>. However, as you can see, you cannot place it on a non-white background.<\/div>\n<div><\/div>\n<div><\/div>\n<div style=\"text-align: center;\"><strong><a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_200,h_200,c_thumb,g_face,r_max\/face_left.jpg\" target=\"_blank\" rel=\"noopener\">&#8230;\/image\/upload\/w_200,h_200,c_thumb,g_face,r_max\/face_left.jpg<\/a><\/strong><\/div>\n<div><\/div>\n<div style=\"background-color: #014e6f; width: 200px; height: 200px; padding: 20px; margin: 0 auto;\"><img loading=\"lazy\" decoding=\"async\" style=\"margin-left: NaNpx; margin-right: NaNpx;\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_200,h_200,c_thumb,g_face,r_max,q_auto\/face_left.jpg\" alt=\"\" width=\"200\" height=\"200\" \/><\/div>\n<div><\/div>\n<div><\/div>\n<div>In order to make the edges transparent, we convert the image to the <strong>PNG<\/strong> format. As you can see below, it looks great. But the resulting image is <strong>63.6KB<\/strong> in size which is almost <strong>x5<\/strong> bigger than the JPG version. This will waste bandwidth &amp; money and will harm the user experience.<\/div>\n<div><\/div>\n<div style=\"text-align: center;\"><strong><a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_200,h_200,c_thumb,g_face,r_max\/face_left.png\" target=\"_blank\" rel=\"noopener\">&#8230;\/image\/upload\/w_200,h_200,c_thumb,g_face,r_max\/face_left.png<\/a><\/strong><\/div>\n<div><strong>\u00a0<\/strong><\/div>\n<div style=\"background-color: #014e6f; width: 200px; height: 200px; padding: 20px; margin: 0 auto;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" style=\"margin-left: NaNpx; margin-right: NaNpx;\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_200,h_200,c_thumb,g_face,r_max\/f_auto,q_auto\/face_left.png\" alt=\"Image of woman\u2019s face in PNG format with semi-transparent background used as a comparison against the webp sample image\" width=\"200\" height=\"200\" \/><\/div>\n<div><\/div>\n<div>The example below generates the same image with the <strong>WebP<\/strong> format. The image looks great, the edges are transparent and the file is just <strong>9.8KB<\/strong> in size, which is even smaller than the non-transparent JPG version.<\/div>\n<div><\/div>\n<div style=\"text-align: center;\"><strong><a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_200,h_200,c_thumb,g_face,r_max\/face_left.webp\" target=\"_blank\" rel=\"noopener\">&#8230;\/image\/upload\/w_200,h_200,c_thumb,g_face,r_max\/face_left.webp<\/a><\/strong><\/div>\n<div><strong>\u00a0<\/strong><\/div>\n<div style=\"background-color: #014e6f; width: 200px; height: 200px; padding: 20px; margin: 0 auto;\"><img loading=\"lazy\" decoding=\"async\" style=\"margin-left: NaNpx; margin-right: NaNpx;\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_200,h_200,c_thumb,g_face,r_max\/f_auto,q_auto\/face_left.webp\" alt=\"\" width=\"200\" height=\"200\" \/><\/div>\n<div><\/div>\n<h2>Lossless WebP Images<\/h2>\n<div><span style=\"font-weight: 400;\">Each<\/span> <span style=\"font-weight: 400;\">WebP example image<\/span> <span style=\"font-weight: 400;\">above used the lossy WebP format with a 90% quality, or lower.<\/span><\/div>\n<div><\/div>\n<div><strong>WebP also supports a lossless format<\/strong> similar to the PNG format. This lossless format is useful for rasterized vector graphics (e.g., logos), that might be visibly degraded in quality using the lossy format.<\/div>\n<div><\/div>\n<div>In order to generate a lossless WebP file, simply set Cloudinary&#8217;s &#8216;<strong>quality<\/strong>&#8216; parameter to <strong>100<\/strong>:<\/div>\n<div><\/div>\n<div style=\"text-align: center;\"><strong><a href=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_300,q_100\/cloudinary_icon.webp\" target=\"_blank\" rel=\"noopener\">&#8230;\/image\/upload\/w_300,q_100\/cloudinary_icon.webp<\/a><\/strong><\/div>\n<div><strong>\u00a0<\/strong><\/div>\n<div><strong><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" style=\"margin-left: NaNpx; margin-right: NaNpx;\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_300,f_auto,q_auto\/cloudinary_icon.webp\" alt=\"Image of cloudinary logo, a webp example of lossless quality\" width=\"300\" height=\"219\" \/><\/strong><\/div>\n<div><\/div>\n<div>Same example in Ruby on Rails:<\/div>\n<pre>&lt;%= cl_image_tag(\"sample.webp\", :quality =&gt; 100) %&gt;\n<\/pre>\n<h3><\/h3>\n<h2>Format Adoption<\/h2>\n<div>As mentioned above, not all browsers support the WebP format yet.<\/div>\n<div><\/div>\n<div>At present, WebP is supported by Google Chrome, Android 4.0+, and Opera. This is a serious disadvantage, as you&#8217;ll need to selectively decide when to to utilize it.<\/div>\n<div><\/div>\n<div>On the other hand, Chrome is quite popular, especially if you have an application targeted on early adopters and techies. Even if you improve the user experience only for your Chrome users and save only the part of your bandwidth that is consumed by Chrome, it might still be worth the hassle of using WebP.<\/div>\n<div><\/div>\n<div>For example, below you can see the statistics of Cloudinary&#8217;s web site for the last 30 days. Chrome is responsible for <strong>62%<\/strong> of our traffic.<\/div>\n<div><\/div>\n<div><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" style=\"margin-left: NaNpx; margin-right: NaNpx;\" src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/f_auto,q_auto\/browser_distribution_iivwy0.png\" alt=\"Image chart showing volume of traffic by browser\" width=\"626\" height=\"201\" \/><\/div>\n<div><\/div>\n<h2>Dynamic WebP Generation Based on Visitor&#8217;s Browser<\/h2>\n<div>To support serving webp only to Chrome\/Android4\/Opera visitors, you can use Javascript code to lazy load images according to your visitors\u2019 browsers.<\/div>\n<div><\/div>\n<div>Cloudinary&#8217;s jQuery plugin allows you to dynamically generate delivery URLs that will transform your images on the fly and deliver the result through a fast CDN with advanced caching.<\/div>\n<div><\/div>\n<div>For example, you can define image tags in your HTML page by setting the &#8216;<strong>src<\/strong>&#8216; attribute to a blank image and set the &#8216;<strong>data-src<\/strong>&#8216; attribute to the<strong> public ID<\/strong> of the actual image uploaded to Cloudinary (&#8216;<strong>sample<\/strong>&#8216; in this example).<\/div>\n<pre>&lt;img src=\"blank.png\" width=\"150\" height=\"100\" data-crop=\"fill\" data-src=\"sample.jpg\"\/&gt;\n<\/pre>\n<div>The following jQuery code will convert all image tags to dynamically generated image URLs instead of the placeholder blank image.<\/div>\n<pre>$('img').webpify();\n<\/pre>\n<div>The page is loaded quickly without waiting for the images to load. Afterward, the jQuery code above will dynamically update the image tags to display either a WebP image or a JPG image, depending on whether there is\u00a0WebP browser support or not.<\/div>\n<div><\/div>\n<div>Chrome result:<\/div>\n<pre>&lt;img src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_fill,h_100,w_150\/sample.webp\"\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0width=\"150\" height=\"100\" data-crop=\"fill\" data-src=\"sample.jpg\"&gt;\n<\/pre>\n<div><\/div>\n<div>Other browsers result:<\/div>\n<pre>&lt;img src=\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/c_fill,h_100,w_150\/sample.jpg\"\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0width=\"150\" height=\"100\" data-crop=\"fill\" data-src=\"sample.jpg\"&gt;\n<\/pre>\n<div>See <a href=\"https:\/\/cloudinary.com\/documentation\/jquery_integration\" target=\"_blank\" rel=\"noopener\">our documentation<\/a> for more details about the jQuery plugin.<\/div>\n<div><\/div>\n<h2>Summary<\/h2>\n<div>Web sites and apps are becoming more and more media-rich. It&#8217;s important to keep track of our bandwidth utilization, optimize downloads and uploads time and improve our users&#8217; experience.<\/div>\n<div><\/div>\n<div>The WebP format is another great tool to achieve our goals. With Cloudinary&#8217;s on-the-fly, cloud-based WebP image format conversion, this becomes much simpler.<\/div>\n<div><\/div>\n<div>The WebP format support is available for all our free and paid plans. <a href=\"https:\/\/cloudinary.com\/users\/register\/free\" target=\"_blank\" rel=\"noopener\">Sign up now<\/a> for a free account if you haven&#8217;t done so already.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Modern image compression techniques have had a large impact on our lifestyle. Digital cameras can save thousands of high-quality photos on a single memory card, smartphones can quickly share high resolution images on the fly, and websites and mobile apps can show rich media quickly. All of this just couldn&#8217;t have worked if image data [&hellip;]<\/p>\n","protected":false},"author":41,"featured_media":21203,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[91,165,214,227,229,257],"class_list":["post-21202","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-django","tag-image-transformation","tag-node","tag-performance-optimization","tag-php","tag-ruby-on-rails"],"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>WebP Example | Automatically Dynamically Deliver WebP Images by Browser<\/title>\n<meta name=\"description\" content=\"How to check for browser support and auto-generate WebP images to reduce bandwidth, improve page load speed and support transparency, lossless images and more.\" \/>\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\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WebP Example | Automatically Dynamically Deliver WebP Images by Browser\" \/>\n<meta property=\"og:description\" content=\"How to check for browser support and auto-generate WebP images to reduce bandwidth, improve page load speed and support transparency, lossless images and more.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2013-07-18T14:47:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-07T00:04:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720384\/Web_Assets\/blog\/13_check_webp_support\/13_check_webp_support.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\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"WebP Example | Automatically Dynamically Deliver WebP Images by Browser\",\"datePublished\":\"2013-07-18T14:47:51+00:00\",\"dateModified\":\"2025-11-07T00:04:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance\"},\"wordCount\":1451,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720384\/Web_Assets\/blog\/13_check_webp_support\/13_check_webp_support.jpg?_i=AA\",\"keywords\":[\"Django\",\"Image Transformation\",\"Node\",\"Performance Optimization\",\"PHP\",\"Ruby on Rails\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2013\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance\",\"url\":\"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance\",\"name\":\"WebP Example | Automatically Dynamically Deliver WebP Images by Browser\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720384\/Web_Assets\/blog\/13_check_webp_support\/13_check_webp_support.jpg?_i=AA\",\"datePublished\":\"2013-07-18T14:47:51+00:00\",\"dateModified\":\"2025-11-07T00:04:16+00:00\",\"description\":\"How to check for browser support and auto-generate WebP images to reduce bandwidth, improve page load speed and support transparency, lossless images and more.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720384\/Web_Assets\/blog\/13_check_webp_support\/13_check_webp_support.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720384\/Web_Assets\/blog\/13_check_webp_support\/13_check_webp_support.jpg?_i=AA\",\"width\":1540,\"height\":847,\"caption\":\"Image showing graphic of the Webp logo\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WebP Example | Automatically Dynamically Deliver WebP Images by Browser\"}]},{\"@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":"WebP Example | Automatically Dynamically Deliver WebP Images by Browser","description":"How to check for browser support and auto-generate WebP images to reduce bandwidth, improve page load speed and support transparency, lossless images and more.","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\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance","og_locale":"en_US","og_type":"article","og_title":"WebP Example | Automatically Dynamically Deliver WebP Images by Browser","og_description":"How to check for browser support and auto-generate WebP images to reduce bandwidth, improve page load speed and support transparency, lossless images and more.","og_url":"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance","og_site_name":"Cloudinary Blog","article_published_time":"2013-07-18T14:47:51+00:00","article_modified_time":"2025-11-07T00:04:16+00:00","og_image":[{"width":1540,"height":847,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720384\/Web_Assets\/blog\/13_check_webp_support\/13_check_webp_support.jpg?_i=AA","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance"},"author":{"name":"","@id":""},"headline":"WebP Example | Automatically Dynamically Deliver WebP Images by Browser","datePublished":"2013-07-18T14:47:51+00:00","dateModified":"2025-11-07T00:04:16+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance"},"wordCount":1451,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720384\/Web_Assets\/blog\/13_check_webp_support\/13_check_webp_support.jpg?_i=AA","keywords":["Django","Image Transformation","Node","Performance Optimization","PHP","Ruby on Rails"],"inLanguage":"en-US","copyrightYear":"2013","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance","url":"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance","name":"WebP Example | Automatically Dynamically Deliver WebP Images by Browser","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720384\/Web_Assets\/blog\/13_check_webp_support\/13_check_webp_support.jpg?_i=AA","datePublished":"2013-07-18T14:47:51+00:00","dateModified":"2025-11-07T00:04:16+00:00","description":"How to check for browser support and auto-generate WebP images to reduce bandwidth, improve page load speed and support transparency, lossless images and more.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720384\/Web_Assets\/blog\/13_check_webp_support\/13_check_webp_support.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720384\/Web_Assets\/blog\/13_check_webp_support\/13_check_webp_support.jpg?_i=AA","width":1540,"height":847,"caption":"Image showing graphic of the Webp logo"},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/how_to_support_webp_images_save_bandwidth_and_improve_user_performance#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"WebP Example | Automatically Dynamically Deliver WebP Images by Browser"}]},{"@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\/v1649720384\/Web_Assets\/blog\/13_check_webp_support\/13_check_webp_support.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21202","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=21202"}],"version-history":[{"count":4,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21202\/revisions"}],"predecessor-version":[{"id":39141,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21202\/revisions\/39141"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/21203"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=21202"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=21202"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=21202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}