You know the URL of a webpage and you want to take a screenshot of it. For instance you want a thumbnail about the webpage.
It can be done very nicely with PhantomJS.
What is PhantomJS?
How to install PhantomJS?
Follow the instructions here. Under Ubuntu I compiled it from source to get the latest version. Note that it takes a lot of time (about 30 minutes). Under Manjaro I could install it via
yaourt and it took 1 minute (and got the newest version). The good news is that installation is not a problem.
How to take a screenshot?
If you download the source, you get a lot of example scripts. One of them is called
rasterize.js, and this is exactly what we need.
$ phantomjs rasterize.js Usage: rasterize.js URL filename [paperwidth*paperheight|paperformat] [zoom] paper (pdf output) examples: "5in*7.5in", "10cm*20cm", "A4", "Letter" image (png/jpg output) examples: "1920px" entire page, window width 1920px "800px*600px" window, clipped to 800x600
phantomjs rasterize.js http://raphaeljs.com/polar-clock.html clock.png
phantomjs rasterize.js https://www.reddit.com/ red.png
It produced an image with dimension 600×3304. It’s too narrow, let’s fix that.
phantomjs rasterize.js https://www.reddit.com/ red.png 1024px
Its dimension is 1024×2432. Looks much better.
The previous image was too high. Let’s take a photo of that part that would be visible on our screen. For this we need to clip a window.
phantomjs rasterize.js https://www.reddit.com/ red.png "1024px*768px"
Great. Now scale it down to get a thumbnail.
Scaling down an image to thumbnail size
$ phantomjs rasterize.js https://www.reddit.com/ screenshot.png "1024px*768px" $ convert -resize 250 screenshot.png thumb.jpg
convert comes from the ImageMagick package. Here we resize the image to width 250px. Convert will keep the image ratio, i.e. it figures out the height value.
ffmpeg -i input.wmv -c:v libx264 -crf 23 -profile:v high -r 30 -c:a libfaac -q:a 100 -ar 48000 output.mp4
More info here.
You want to resize an image to a given width but you want to keep the width/height ratio of the image.
convert -resize 200 big.jpg small.jpg
Here the new width will be 200 pixels.
pandoc input.txt -o output.pdf
By the way, pandoc can convert from / to lots of file formats.
Extract images from a GIF:
convert animated.gif frames%03d.png
More info here.
Merge images into an animated GIF:
convert -delay 20 -loop 0 *.png result.gif
More info here.
I wanted to convert a PDF with Calibre but it failed. I tried with Online Convert(er) too and it succeeded…
In the lab we have a photocopier that can scan too. Quite cool, you can precise your email address and it sends you the scanned page in .tif format.
However, pages must be scanned one by one and each of them is sent as a separate .tif file. Each .tif file is around 2.8 MB large with a resolution of 4900 x 7000 pixels. How to resize them and convert them to .jpg files? Gimp is one way but could we solve it in command-line?
Put the .tif files in a folder and create a subfolder called “out”. This way the output won’t be mixed with the input.
for i in *.tif; do echo $i; convert $i -resize 24% out/`basename $i .tif`.jpg; done
Each .tif is made smaller (width around 1200 pixels) and converted to .jpg.
As a final touch, convert the JPGs to a PDF file.
cd out convert *.jpg doc.pdf
Does anyone know how to to resize an image the following way: let width be 1200 pixels and keep the aspect ratio? Above the 24% was the result of a manual computation…
Answer: just use “
convert -resize 1200 in.tif out.jpg“. The output will have width=1200 pixels with the same ratio as the input image. (Thanks Yves for the tip.)