Image Resizer – Bulk Resize Images & Crop Images avatar

Image Resizer – Bulk Resize Images & Crop Images

Pricing

from $1.00 / 1,000 resized images

Go to Apify Store
Image Resizer – Bulk Resize Images & Crop Images

Image Resizer – Bulk Resize Images & Crop Images

Resize images in bulk to every size you need in one run: thumbnails, web sizes, exact crops or padded squares. Keep the format or convert to WebP, get one ZIP, and see the exact dimensions of every file. Failed images are free.

Pricing

from $1.00 / 1,000 resized images

Rating

0.0

(0)

Developer

Tidyrun

Tidyrun

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Image Resizer – Bulk Resize to Many Sizes

Give it image links and the sizes you need. Every image comes back in all of them in one run — thumbnail, web size, exact square crop, padded social banner — each file named after its size, with the exact dimensions you actually got.

Quick start

  1. Paste your image links into Image URLs (or upload a text file with one URL per line).
  2. Leave the Sizes as they are, or write your own — one per line.
  3. Click Start. The Output tab shows every file with its size name and dimensions.

Input example:

{
"imageUrls": [
{ "url": "https://example.com/photo.jpg" },
{ "url": "https://example.com/logo.png" }
],
"sizes": ["thumb:400x400 crop", "medium:800", "og:1200x630 pad", "large:1600"],
"format": "webp",
"zip": true
}

Output row (shortened):

{
"sourceUrl": "https://example.com/photo.jpg",
"size": "thumb",
"requested": "thumb:400x400 crop",
"status": "resized",
"fileUrl": "https://api.apify.com/v2/key-value-stores/.../photo-3f1c2a9b7e-thumb.webp",
"width": 400,
"height": 400,
"bytes": 29307,
"originalWidth": 1280,
"originalHeight": 1709,
"format": "webp",
"cropped": true,
"upscaled": false,
"chargedAsImages": 1
}

How to write a size

You writeYou get
800At most 800 px wide, height follows the picture
x600At most 600 px tall, width follows the picture
800x600Fits inside 800 × 600 — nothing cut off, so one side is usually smaller
800x600 cropExactly 800 × 600, cut from the middle
800x600 smartExactly 800 × 600, cut around the busiest part of the picture
1200x630 padExactly 1200 × 630, the gaps filled with your Padding colour
thumb:400x400 cropThe same, and the file is named …-thumb.jpg

Run it after a scraper

On your scraper or its task, open Integrations, search for this Actor and set its input:

{
"datasetId": "{{resource.defaultDatasetId}}",
"urlField": "images.url"
}

Every time the scraper finishes, its images go through this Actor. Leave URL field empty and it finds the image links itself; use a dot path (images.0.url, images.url for a whole list) when you want one exact field. Each row keeps recordIndexes, the dataset rows the image came from.

Settings worth knowing

SettingWhat it does
Output formatKeep the original, or convert everything to WebP, JPEG, PNG or AVIF as it is resized.
Quality82 by default, for JPEG, WebP and AVIF. PNG and GIF stay lossless.
Enlarge images that are too smallOff by default. A small source is returned at its own size rather than blown up, and the row says upscaled: false.
Padding colourOnly for pad sizes. #ffffff, #0000 for transparent, or a name like white.
Put everything in one ZIPOne file to download instead of clicking through a list.
Max file sizeSkip source images bigger than this instead of spending the run on them.

Why this one

Common problemWhat happens here
One run per size, so four runs for four sizesWrite all the sizes once; every image is made in all of them in a single run.
Files all called output-1.jpgEach file is named after the source and the size, e.g. photo-3f1c2a9b7e-thumb.jpg.
"Is this really 400 × 400?"Every row carries the dimensions you got, the original dimensions, and whether it was cropped or enlarged.
Small images come back blurry and stretchedNothing is enlarged unless you ask, and a crop bigger than the source keeps the shape instead of inventing pixels.
Transparency turns blackAlpha is kept, and pad can fill with #0000 to stay transparent.
Animated GIFs lose their animationAnimated sources keep every frame.
Photos come out rotatedEXIF orientation is applied before resizing.
"Out of memory" on big batchesImages are resized a few at a time within the run's memory, and one too large gets a clear error instead of crashing the run.
One site gets hammered and blocks youAt most 4 images at a time per site, with an automatic slow-down if a site rate-limits.
Paying for broken links404s, pages that are not images and oversized files are never charged.

Pricing

Pay per file produced. Files that fail are never charged, and there is no fee just for starting a run.

A resized file up to 3 megapixels (about 2048 × 1448, which is larger than most things you resize to) counts as one — so a thumbnail from a 40-megapixel photo is still one. Only a file bigger than 3 megapixels counts one more per 3 megapixels. Each row says what it was charged as in chargedAsImages.

Four sizes of one image are four files, so one source image at four sizes counts as four.

Call it from your code

curl -X POST "https://api.apify.com/v2/acts/tidyrun~image-resizer/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"imageUrls":[{"url":"https://example.com/photo.jpg"}],"sizes":["thumb:400x400 crop","large:1600"]}'

Tips

  • Building a responsive srcset? 400, 800, 1600 in one run gives you the three files and their exact widths for the w descriptors.
  • Product grid? thumb:400x400 crop keeps every tile the same shape; pad with #ffffff if you would rather not cut the product.
  • Social preview? 1200x630 pad is the usual Open Graph size, and padding keeps the whole picture visible.
  • Want them smaller as well as shorter? Set Output format to WebP — resizing and converting happen in the same pass.

Responsible use

Downloads the image URLs you provide, as an ordinary visitor. It does not log in, does not solve CAPTCHAs and does not collect personal data. Only resize images you have the right to use.