Example #1
0
    def test_get_img_ext(self):
        """
        get_img_ext should return the appropriate image type extension
        for file or a default ('unknown') if file cannot be
        deciphered.
        """
        from garage.image_utils import get_img_ext
        self._msg('test', 'get_img_ext', first=True)

        path, fname, w, h, ext = self._get_test_image('rodents')
        result = get_img_ext(path)
        self.assertEqual(result, ext)
        self._msg('image', fname)
        self._msg('ext', ext)
        self._msg('result', result)

        path, fname, w, h, ext = self._get_test_image('monkeys1')
        result = get_img_ext(path)
        self.assertEqual(result, ext)
        self._msg('image', fname)
        self._msg('ext', ext)
        self._msg('result', result)

        path, fname, w, h, ext = self._get_test_image('monkeys2')
        result = get_img_ext(path)
        self.assertEqual(result, ext)
        self._msg('image', fname)
        self._msg('ext', ext)
        self._msg('result', result)
Example #2
0
    def test_create_thumb(self):
        """
        create_thumb should generate a thumbnail of specified size and
        quality.
        * result should be, e.g., /path/to/thumb/thumb-245x136.jpg
        """
        from garage.image_utils import (
            create_thumb,
            get_image_size,
            get_img_ext,
        )
        from garage.utils import delete_file
        self._msg('test', 'create_thumb', first=True)

        tempdir = tempfile.gettempdir()
        path, fname, w, h, ext = self._get_test_image('rodents')
        w, h = 245, 138
        quality = 75
        dst = tempdir
        fbase = 'rodents'
        thumb = create_thumb(path, w, h, quality, dst, fbase, ext)
        width, height = get_image_size(thumb)
        fext = get_img_ext(thumb)
        self.assertTrue(os.path.isfile(thumb))
        self.assertEqual((width, height), (w, h))
        self.assertEqual(fext, ext)
        self._msg('original', fname)
        self._msg('thumb', thumb)
        self._msg('width', width)
        self._msg('height', height)
        self._msg('ext', fext)
        self.assertTrue(delete_file(thumb))
Example #3
0
    def test_resize_image(self):
        """
        resize_image should downsample an image and resize according
        to input dimensions.
        """
        from garage.image_utils import (
            resize_image,
            get_img_ext,
            get_file_basename,
            get_image_size,
        )
        from garage.utils import delete_file
        self._msg('test', 'resize_image', first=True)

        tempdir = tempfile.gettempdir()
        path, fname, w, h, ext = self._get_test_image('rodents')
        fbase = 'rodents'
        w, h = 500, 280
        dst = '%s-%dx%d.%s' % (os.path.join(tempdir, fbase), w, h, ext)
        img = Image.open(path)
        result = resize_image(img, (w, h), True)
        result.save(dst, quality=75)
        self.assertTrue(os.path.isfile(dst))
        width, height = get_image_size(dst)
        fext = get_img_ext(dst)
        self.assertEqual((width, height), (w, h))
        self.assertEqual(fext, ext)
        self._msg('original', dst)
        self._msg('resized', result)
        self._msg('width', width)
        self._msg('height', height)
        self._msg('ext', fext)
        self.assertTrue(delete_file(dst))
Example #4
0
    def test_generate_thumb(self):
        """
        generate_thumb is a wrapper function for create_thumb, so
        should bahave identically with the same parameters.
        * result should be, e.g., /path/to/thumb/thumb-245x136.jpg
        """
        from garage.image_utils import (
            generate_thumb,
            get_image_size,
            get_img_ext,
        )
        from garage.utils import delete_file
        self._msg('test', 'generate_thumb', first=True)

        tempdir = tempfile.gettempdir()
        path, fname, w, h, ext = self._get_test_image('rodents')
        w, h = 245, 138
        quality = 75
        dst = tempdir
        thumb = generate_thumb(path, w, h, quality, dst)
        width, height = get_image_size(thumb)
        fext = get_img_ext(thumb)
        self.assertTrue(os.path.isfile(thumb))
        self.assertEqual((width, height), (w, h))
        self.assertEqual(fext, ext)
        self._msg('original', fname)
        self._msg('thumb', thumb)
        self._msg('width', width)
        self._msg('height', height)
        self._msg('ext', fext)
        self.assertTrue(delete_file(thumb))
Example #5
0
def save_to_remote_storage(path, storage=None):
    """
    Push a local file to remote media storage.

    :param path: local path of file
    :param storage: storage instance to use (default: default_storage)
    :returns: url of file on remote storage server
    """
    if not path or not os.path.isfile(path):
        logger().debug('save to remote storage - cannot find file: %s' % path)
        remote_path = path
    else:
        if not storage:
            storage = default_storage

        if storage == resources_storage:
            fkey = path.replace(RESOURCES_ROOT, '')
        else:
            fkey = path.replace(MEDIA_ROOT, '')

        # determine mime type
        fext = get_img_ext(path)
        content_type = MIME_TYPES.get(fext, UNKNOWN_MIME_TYPE)

        # write file to remote server
        file = storage.open(fkey, 'w')
        storage.headers.update({"Content-Type": content_type})
        f = open(path, 'rb')
        media = File(f)
        for chunk in media.chunks(chunk_size=FILE_IO_CHUNK_SIZE):
            file.write(chunk)
        file.close()
        media.close()
        f.close()

        # construct remote url
        if storage == resources_storage:
            remote_path = '%s%s' % (RESOURCES_URL, fkey)
        else:
            remote_path = '%s%s' % (MEDIA_URL, fkey)
        logger().debug(
            'save_to_remote_storage - local: %s / remote: %s / mime-type: %s' %
            (path, remote_path, content_type))

    return remote_path
Example #6
0
def get_image_ext(path, default_ext=None, use_path_ext=False):
    """
    Return file name and extension for image.
    * if there's something wrong with the image, use the file name's
      extension as a replacement.

    :param path: image path
    :param default_ext: default extension if PIL can't determine image type
    :param use_path_ext: if True, get extension from file name
    :returns: file extension
    """
    try:
        fext = get_img_ext(path, default_ext=None)
        assert fext
    except AssertionError:
        if use_path_ext:
            fname, fext = os.path.splitext(path)
        else:
            fext = default_ext
    return fext