In the past three years, the amount of image data on the median mobile webpage has doubled. Growing images translate directly to users hitting data transfer caps, experiencing slower websites, and even leaving if a website doesn’t load in a reasonable amount of time. The crime is many of these images are so slow because they are larger than they need to be, sending data over the wire which has absolutely no (positive) impact on the user’s experience.
To provide a concrete example, let’s consider this photo of Cloudflare’s Lava Lamp Wall:
On the left you see the photo, scaled to 300 pixels wide. On the right you see the same image delivered in its original high resolution, scaled in a desktop web browser. On a regular-DPI screen, they both look the same, yet the image on the right takes more than twenty times more data to load. Even for the best and most conscientious developers resizing every image to handle every possible device geometry consumes valuable time, and it’s exceptionally easy to forget to do this resizing altogether.
Today we are launching a new product, Image Resizing, to fix this problem once and for all.
Announcing Image Resizing
With Image Resizing, Cloudflare adds another important product to its suite of available image optimizations. This product allows customers to perform a rich set of the key actions on images.
Resize - The source image will be resized to the specified height and width. This action allows multiple different sized variants to be created for each specific use.
Crop - The source image will be resized to a new size that does not maintain the original aspect ratio and a portion of the image will be removed. This can be especially helpful for headshots and product images where different formats must be achieved by keeping only a portion of the image.
Compress - The source image will have its file size reduced by applying lossy compression. This should be used when slight quality reduction is an acceptable trade for file size reduction.
Convert to WebP - When the users browser supports it, the source image will be converted to WebP. Delivering a WebP image takes advantage of the modern, highly optimized image format.
By using a combination of these actions, customers store a single high quality image on their server, and Image Resizing can be leveraged to create specialized variants for each specific use case. Without any additional effort, each variant will also automatically benefit from Cloudflare’s global caching.
Examples
Ecommerce Thumbnails
Ecommerce sites typically store a high-quality image of each product. From that image, they need to create different variants depending on how that product will be displayed. One example is creating thumbnails for a catalog view. Using Image Resizing, if the high quality image is located here:
https://example.com/images/shoe123.jpg
This is how to display a 75x75 pixel thumbnail using Image Resizing:
<img src="/cdn-cgi/image/width=75,height=75/images/shoe123.jpg">
Responsive Images
When tailoring a site to work on various device types and sizes, it’s important to always use correctly sized images. This can be difficult when images are intended to fill a particular percentage of the screen. To solve this problem, can be used.
Without Image Resizing, multiple versions of the same image would need to be created and stored. In this example, a single high quality copy of hero.jpg is stored, and Image Resizing is used to resize for each particular size as needed.
<img width="100%" srcset=" /cdn-cgi/image/fit=contain,width=320/assets/hero.jpg 320w, /cdn-cgi/image/fit=contain,width=640/assets/hero.jpg 640w, /cdn-cgi/image/fit=contain,width=960/assets/hero.jpg 960w, /cdn-cgi/image/fit=contain,width=1280/assets/hero.jpg 1280w, /cdn-cgi/image/fit=contain,width=2560/assets/hero.jpg 2560w, " src="/cdn-cgi/image/width=960/assets/hero.jpg">
Enforce Maximum Size Without Changing URLs
Image Resizing is also available from within a Cloudflare Worker. Workers allow you to write code which runs close to your users all around the world. For example, you might wish to add Image Resizing to your images while keeping the same URLs. Your users and client would be able to use the same image URLs as always, but the images will be transparently modified in whatever way you need.
You can install a Worker on a route which matches your image URLs, and resize any images larger than a limit:
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
return fetch(request, {
cf: {
image: {
width: 800,
height: 800,
fit: 'scale-down'
}
});
}
As a Worker is just code, it is also easy to run this worker only on URLs with image extensions, or even to only resize images being delivered to mobile clients.
Cloudflare and Images
Cloudflare has a long history building tools to accelerate images. Our caching has always helped reduce latency by storing a copy of images closer to the user. Polish automates options for both lossless and lossy image compression to remove unnecessary bytes from images. Mirage accelerates image delivery based on device type. We are continuing to invest in all of these tools, as they all serve a unique role in improving the image experience on the web.
Image Resizing is different because it is the first image product at Cloudflare to give developers full control over how their images would be served. You should choose Image Resizing if you are comfortable defining the sizes you wish your images to be served at in advance or within a Cloudflare Worker.
Next Steps and Simple Pricing
Image Resizing is available today for Business and Enterprise Customers. To enable it, login to the Cloudflare Dashboard and navigate to the Speed Tab. There you’ll find the section for Image Resizing which you can enable with one click.
This product is included in the Business and Enterprise plans at no additional cost with generous usage limits. Business Customers have 100k requests per month limit and will be charged $10 for each additional 100k requests per month. Enterprise Customers have a 10M request per month limit with discounted tiers for higher usage. Requests are defined as a hit on a URI that contains Image Resizing or a call to Image Resizing from a Worker.
Now that you’ve enabled Image Resizing, it’s time to resize your first image.
Using your existing site, store an image here:
https://yoursite.com/images/yourimage.jpg
Use this URL to resize that image:
https://yoursite.com/cdn-cgi/image/width=100,height=100,quality=75/images/yourimage.jpg
Experiment with changing
width=
,height=
, andquality=
.
The instructions above use the Default URL Format for Image Resizing. For details on options, uses cases, and compatibility, refer to our Developer Documentation.