tinyjpg() Benchmarks

1 Overview

This document benchmarks the tinyjpg() function from the tinyimg package across different quality levels. We test with three types of plots:

  1. A scatterplot based on the penguins dataset
  2. A simple boxplot (simpler graphics)
  3. A complex 3D perspective plot (more complex graphics)

For each quality level, we measure:

2 Test Plots

First, we create test plots using the jpeg() device (set as default via the chunk option dev = 'jpeg'):

Penguin bill length vs flipper length.

1 Penguin bill length vs flipper length.

Miles per gallon by cylinder count.

2 Miles per gallon by cylinder count.

A complex 3D surface defined by the function sin(r)/r.

3 A complex 3D surface defined by the function sin(r)/r.

3 Benchmarks

Now let’s optimize these JPEG files at different quality levels and measure the results:

#> scatterplot-1.jpeg -> scatterplot_q10.jpg | 28.1 KB -> 5.4 KB (-80.9%)
#> scatterplot-1.jpeg -> scatterplot_q30.jpg | 28.1 KB -> 10.9 KB (-61.2%)
#> scatterplot-1.jpeg -> scatterplot_q50.jpg | 28.1 KB -> 14.6 KB (-47.9%)
#> scatterplot-1.jpeg -> scatterplot_q70.jpg | 28.1 KB -> 19.0 KB (-32.5%)
#> scatterplot-1.jpeg -> scatterplot_q80.jpg | 28.1 KB -> 22.9 KB (-18.3%)
#> scatterplot-1.jpeg -> scatterplot_q90.jpg | 28.1 KB -> 30.6 KB (+8.9%)
#> scatterplot-1.jpeg -> scatterplot_q95.jpg | 28.1 KB -> 38.8 KB (+38.1%)
#> boxplot-1.jpeg -> boxplot_q10.jpg | 18.4 KB -> 4.2 KB (-77.0%)
#> boxplot-1.jpeg -> boxplot_q30.jpg | 18.4 KB -> 7.1 KB (-61.5%)
#> boxplot-1.jpeg -> boxplot_q50.jpg | 18.4 KB -> 8.8 KB (-52.3%)
#> boxplot-1.jpeg -> boxplot_q70.jpg | 18.4 KB -> 10.5 KB (-43.1%)
#> boxplot-1.jpeg -> boxplot_q80.jpg | 18.4 KB -> 11.9 KB (-35.6%)
#> boxplot-1.jpeg -> boxplot_q90.jpg | 18.4 KB -> 14.4 KB (-21.9%)
#> boxplot-1.jpeg -> boxplot_q95.jpg | 18.4 KB -> 16.7 KB (-9.1%)
#> persp-1.jpeg -> persp_q10.jpg | 43.9 KB -> 5.8 KB (-86.8%)
#> persp-1.jpeg -> persp_q30.jpg | 43.9 KB -> 14.9 KB (-66.0%)
#> persp-1.jpeg -> persp_q50.jpg | 43.9 KB -> 21.1 KB (-52.0%)
#> persp-1.jpeg -> persp_q70.jpg | 43.9 KB -> 29.4 KB (-33.0%)
#> persp-1.jpeg -> persp_q80.jpg | 43.9 KB -> 36.5 KB (-16.9%)
#> persp-1.jpeg -> persp_q90.jpg | 43.9 KB -> 46.0 KB (+4.7%)
#> persp-1.jpeg -> persp_q95.jpg | 43.9 KB -> 55.0 KB (+25.2%)
Plot Quality Size_KB Reduction_pct Time_sec
scatterplot 10 5.376 80.853 0.023
scatterplot 30 10.891 61.212 0.026
scatterplot 50 14.631 47.891 0.027
scatterplot 70 18.956 32.486 0.031
scatterplot 80 22.940 18.295 0.035
scatterplot 90 30.574 -8.894 0.041
scatterplot 95 38.778 -38.113 0.046
boxplot 10 4.229 77.023 0.021
boxplot 30 7.081 61.531 0.022
boxplot 50 8.782 52.289 0.023
boxplot 70 10.471 43.116 0.025
boxplot 80 11.855 35.593 0.025
boxplot 90 14.372 21.922 0.029
boxplot 95 16.738 9.067 0.028
persp 10 5.806 86.789 0.023
persp 30 14.937 66.012 0.029
persp 50 21.086 52.019 0.039
persp 70 29.425 33.044 0.047
persp 80 36.500 16.944 0.050
persp 90 46.007 -4.689 0.055
persp 95 55.025 -25.211 0.062

A visual comparison of the quality optimization results:

4 Visualization

File size vs quality level.

4 File size vs quality level.

Size reduction percentage vs quality level.

5 Size reduction percentage vs quality level.

Processing time vs quality level.

6 Processing time vs quality level.