All the calibration images in PNG format are stored in GS. Follow the
instructions to add a new resolution image, using 1152x864 as an example:

 * Change the working directory to autotest/files/client/cros/multimedia

 * Generate the SVG image for the new resolution:
   $ RESOLUTION=1152x864
   $ ./image_generator.py image-$(RESOLUTION).svg

 * Convert the SVG image to the PNG format, like using ImageMagick:
   $ convert image-$(RESOLUTION).svg image-$(RESOLUTION).png

 * Browse the following URL for the GS folder:
   http://go/browse_chameleon_calibration_images

 * Upload the PNG image

 * Change the permission of the image to public
   Click the right "..." -> "Edit permissions" -> "Add item"
   Add a new entity ("User", "allUsers", "Reader") and click "Save"

 * Verify if the new image can be accessed:
   $ rm -f image-$(RESOLUTION).png
   $ ./image_generator.py image-$(RESOLUTION).png
   The PNG image should be generated by fetching from GS without any error.
