12

Is there a quick and easy way to convert many HEIC files to png on macOS?

Example

Suppose we take some live photos on iPhone, airdrop them to MacBook, and we want to upload them to a site that only accepts .png files.

enter image description here

I've noticed if you simply change the extension from .HEIC to .png (e.g. in the above image), then as far as I can tell, the image file is treated accordingly by programs and it 'works'.

However, I guess the underlying file hasn't changed, so it could still contain live photo information (I think), which a normal png wouldn't have, which, in a worst case, could be a security risk or in less severe cases simply be an annoyance.

What I know so far

The best I can do right now is go through the files one by one renaming them. I would really like to know what other solutions are available (via point and click and terminal), and have a strong preference for not having to download any external software.

stevec
  • 3,767
  • 7
  • 33
  • 68

3 Answers3

26

To convert all .HEIC images in a directory to .png

Open terminal. cd to the directory where the .HEIC files you want to convert are stored.

Be careful, this will convert all .HEIC files in the directory - back them up first if you're not sure you want to do that just yet.

for f in *.HEIC
do sips -s format png "${f}" --out "${f%.*}.png"
done

If you want to convert and resize images

The following will convert and resize images so the maximum height and width is 400 pixels (but you can change 400 below to any value)

Be careful, this will convert and resize all .HEIC files in the directory - back them up first if you're not sure you want to do that just yet.

for f in *.HEIC
do sips -s format png "${f}" -Z 400 --out "${f%.*}.png"
done

Reference

Additional note

To convert from HEIC to jpeg, use the same code examples above but replace png with jpeg in 2 places, and you'll have jpeg instead.

stevec
  • 3,767
  • 7
  • 33
  • 68
  • `sips` doesn't support `jpg`? PNG is kinda weird for photographs. – Alper Aug 15 '21 at 20:38
  • 1
    `-s format jpeg` and then --out `"${f%.*}.jpg"` to get jpg – philshem Oct 26 '21 at 12:06
  • fwiw (photographers might not care) but expansion to *.jpeg or *.png takes a 1MB heic file and explodes it to ~7MB and ~11MB respectively. If you want to optimize for best disk space leave this alone. – avgvstvs Feb 08 '23 at 18:18
2

Use ImageMagick to produce JPGs that are the same quality as the the original HEIC files.

I found @stevec's answer using sips produces very low resolution images that were basically useless for my purposes. So, I had to find a new solution.

for f in *.HEIC
    do magick "$f" -quality 100% "$f.jpg"
done
conner.xyz
  • 121
  • 2
  • I prefer to use [GraphicsMagick](http://www.graphicsmagick.org/) as it is smaller and more efficient (faster) than ImageMagick. The command line is the same except for the way it is called: `gm convert….` – Allan Jan 25 '23 at 19:05
  • fwiw (photographers might not care) but expansion to *.jpeg or *.png takes a 1MB heic file and explodes it to ~7MB and ~11MB respectively. If you want to optimize for best disk space leave this alone. – avgvstvs Feb 08 '23 at 18:17
  • I found out that `sips` also modifies the image occasionally. After converting 20 pictures of my kids, one of them had the same width and height but it was stretched horizontally a bit making my daughter look weird. – Najki Feb 24 '23 at 20:52
-1

I did it like this:

for f in *.HEIC
    convert "$f" "$f.jpg"
end

That's using ImageMagick but I consider that something you should have on your system anyway.

Alper
  • 292
  • 2
  • 11