50

I need to convert a lot of CR2 photos to either JPG or PNG, no editing. How to do this?

13 Answers13

59

I'll go a different route... Use ufraw-batch not ufraw.

sudo apt-get install ufraw-batch

## This will output (not replace) the file with a new extension.
## foo.CR2 exported to foo.png
ufraw-batch --out-type png *.CR2

See ufraw-batch --help and man ufraw-batch for more info.

Evan Carroll
  • 7,703
21

ufraw alternatives

The accepted answer recommends to use ufraw, but ufraw's development has ceased as of June 2015 and it's not supported by current Ubuntu releases. See Ubuntu Bugtracker, which recommends darktable or rawtherapee as alternatives. Both tools are GU tools, but it is possible to use them from CLI.

darktable: manual, man page

Batch processing example:

for pic in *.CR2
do
     darktable-cli "$pic" "$(basename ${pic%.CR2}.jpg)"; 
done

rawtherapee: manual

Pang
  • 373
Stefan
  • 311
13

Ufraw

you can convert .cr2 to .jpeg by ufraw.

sudo apt-get install ufraw

Right click on the file and select open with ufraw.

** You can also import them to Gimp with gimp-ufraw and then export as .png or .jpeg.

sudo apt-get install gimp-ufraw
7

For another alternative, use mogrify:

mogrify -format png *.cr2
Pablo Bianchi
  • 17,371
4

Try nconvert

As command line tool OR xnconvert as GUI tool

Yanes
  • 67
3

.cr2 files are apparently some kind of Canon digital camera raw format. Maybe that's what CR stands for?--"Canon Raw".

Anyway, I just recovered a bunch of them from a corrupted SD card from a digital camera, using ddrescue and photorec (installed by sudo apt install testdisk, and here's how I just converted hundreds of recovered .cr2 files to .png and .jpg images:

Update after writing this answer:

[I need to experiment more with this too]

CR2 files appear to be valid TIF files too, so you might also try simply changing the file extension from .cr2 to .tif and then using tools to convert from .tif to .jpg or .png! I just renamed the file extension from .cr2 to .tif and double-clicked it and my image viewer in Ubuntu 20.04 was able to open it just fine.

How to convert a single .cr2 image to a .jpg or .png image

Tested in Ubuntu 20.04.

# First, install ImageMagick
sudo apt install imagemagick

strip off the .cr2 extension from your file (this is required for some reason

to make convert work)

mv myimage.cr2 myimage

Create a JPG from that image.

- This creates myimage.jpg. The original myimage image remains intact.

convert myimage myimage.jpg

Create a PNG image from that image

- This creates myimage.png. The original myimage image remains intact.

convert myimage myimage.png

That's it!

Note: if convert won't work, try the fix I mention in my answer here.

How to batch convert hundreds of .cr2 images into .jpg or .png images

In my case, I needed to convert hundreds of images from .cr2 to .png. Here is how I did that as fast as possible, using all 8 of my CPU cores at once:

cd path/to/all/of/your/cr2/images

Move all .cr2 images into a "cr2" folder

mkdir cr2 mv *.cr2 cr2 cd cr2

strip the extension (convert won't work if you don't do this first, for some

reason)

How to strip file extensions in bash:

https://unix.stackexchange.com/a/180272/114401

for file in *.cr2; do mv -- "$file" "${file%%.cr2}"; done

Convert them all to PNG images now!

- I learned about xargs from here:

https://stackoverflow.com/a/25532027/4561887 and in my answer here:

https://stackoverflow.com/a/76910116/4561887

- Note: -P "$(nproc)" says to spawn as many parallel processes as you have

CPU threads, since nproc returns the number of hardware threads

(hyperthreaded "processors", or "cores") your computer has. So if nproc

shows you have 8 hardware threads, this will spawn 8 simultaneous convert

operations to speed this up!

ls | xargs -n 1 -P "$(nproc)" -I% convert % %.png

When done, move all produced .png images to a "png" dir one level up, at the

same level as the "cr2" dir we are currently in

mkdir ../png mv *.png ../png/

Going further: how to recover images from a corrupted camera SD card, memory card, drive, or disk (or just deleted files)

(This is how I got all of my .cr2 files above).

See my answer here: Unix/Linux undelete/recover deleted files

References

  1. Converting images from .cr2 to .png or .jpg:
    1. Google search for "linux convert .cr2 to jpg"
      1. Very useful!: where I first learned about using convert to convert .cr2 images to .png. I also learned here that you have to strip the .cr2 extension first to make it work!: https://www.linuxshelltips.com/convert-raw-camera-image-to-jpeg-in-linux/
    2. Where I learned how to strip file extensions in bash: https://unix.stackexchange.com/a/180272/114401
    3. Where I learned how to use xargs to parallelize operations on files listed by ls: https://stackoverflow.com/a/25532027/4561887
  2. My answer where I used xargs with -P "$(nproc)" to unzip many password-protected files at once, in parallel: Stack Overflow: unzip password protected zip in unix
Gabriel Staples
  • 11,502
  • 14
  • 97
  • 142
2

The method that really worked for me:

You need dcraw and ppmtojpeg (install with apt)

for i in *.CR2; do dcraw -c $i | ppmtojpeg > $1.jpg; echo $i done; done

What it does: First convert CR2 to PPM with dcraw passing the output to ppmtojpeg which converts to JPG.

I found this here

Peter
  • 29
  • 1
2

Create a bash file like foo.sh and execute as ./foo.sh in command line:

#!/bin/sh

for i in $(ls)
do
ufraw-batch --out-type png $i
echo "conversion done $i"
done
karel
  • 122,292
  • 133
  • 301
  • 332
2

I had trouble with ufraw since it produces a segmentation fault on elementary OS (see https://bugs.launchpad.net/ubuntu/+source/ufraw/+bug/1768855). I combined your answers (thanks!) and finally got a working version.

First get the right command for exiftool (as mentioned by Rafael):

exiftool -s2 -all -b -X -fXMP:XMP test.RAF  | grep Preview

which is in my case not -Composite:PreviewImage but:

File:PreviewImage

So you can use the batch script from Abu:

#!/bin/sh

for i in *.RAF do exiftool -File:PreviewImage -b $i > $i.jpg echo $i done

1

You could also program a simple loop in the console.

For example (using the fish console), and assuming the active directory only has RAW files.

set files (ls)
for i in $files
    dcraw $i
end

or

set files (ls)
for i in $files
    ufraw-batch --out-type=tif --out-depth $i
end

I use ufraw-batch that way because it often leads to an error, see https://bugs.launchpad.net/ubuntu/+source/ufraw/+bug/1768855 .

user258532
  • 1,298
1

In case you need preview the photos as an initial filtering step, here's what I do

  1. install packages: sudo apt-get install -y dcraw netpbm
  2. extract all thumbnails as jpeg: for i in *.CR2; do dcraw -e $i ; done
  3. let my wife filter the images (the jpgs)
  4. run the following .py script (python3 rm_filtered_cr2.py):
   import os
   files = os.listdir()
   for cr2_file in files:
       if cr2_file.endswith('.CR2'):
           thumbnail_file = cr2_file.replace('.CR2', '.thumb.jpg')
           if not os.path.exists(thumbnail_file):
               print("removing %s" % cr2_file)
               os.remove(cr2_file)
Daniel
  • 111
0

Use:

exiftool -Composite:PreviewImage -b photo.CR2 > photo.jpg

Longer answer:

ufraw-batch conversion quality is very bad. Imagemagick uses ufraw under the hoods (unfortunately). dcraw is better, but still not great. The best solution I found out was to use exif to extract PreviewImage metadata. I believe that's generated by the camera itself.

Ref: https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=6936&sid=9548c421f1bd69f192e632d06ca03dff&start=30#p130949

-1

converting cr2 files to jpg is pretty easy, you can use free software like canon's own digital photo professional that usually comes with the camera. If you're more into quick online tools, websites like iloveimg or convertio let you upload and convert without installing anything, drag, drop, and download. Let me know what device you're using and I can suggest the best way. I would suggest online tools as they provide you bulk processing options.

Marcus
  • 1
  • 2