Ejemplo n.º 1
0
    def _get_previews(self):
        """Extract previews."""
        if len(self.metadata.get_preview_properties()) > 0:
            # Fetched previews key.
            self.results["preview"] = []

            for preview in self.metadata.get_preview_properties():
                p = AutoVivification()
                p["mime_type"] = preview.get_mime_type()
                p["size"] = len(self.metadata.get_preview_image(preview).get_data())
                p["ext"] = preview.get_extension()
                p["dimensions"] = [preview.get_width(), preview.get_height()]

                # Resize if needed, and store.
                try:
                    img = utils.str2image(self.metadata.get_preview_image(preview).get_data())
                    if preview.get_width() > 256 or preview.get_height() > 160:
                        p["original_file"] = save_file(utils.image2str(img), content_type="image/jpeg")
                    img.thumbnail([256, 160], Image.ANTIALIAS)
                    p["file"] = save_file(utils.image2str(img), content_type="image/jpeg")
                except Exception as e:
                    logger.warning("Error reading preview: {0}".format(e))
                    continue
                finally:
                    # Save.
                    self.results["preview"].append(p)
Ejemplo n.º 2
0
    def _get_previews(self):
        """Extract previews."""
        if len(self.metadata.get_preview_properties()) > 0:
            # Fetched previews key.
            self.results["preview"] = []

            for preview in self.metadata.get_preview_properties():
                p = AutoVivification()
                p["mime_type"] = preview.get_mime_type()
                p["size"] = len(
                    self.metadata.get_preview_image(preview).get_data())
                p["ext"] = preview.get_extension()
                p["dimensions"] = [preview.get_width(), preview.get_height()]

                # Resize if needed, and store.
                try:
                    img = utils.str2image(
                        self.metadata.get_preview_image(preview).get_data())
                    if preview.get_width() > 256 or preview.get_height() > 160:
                        p["original_file"] = save_file(
                            utils.image2str(img), content_type="image/jpeg")
                    img.thumbnail([256, 160], Image.ANTIALIAS)
                    p["file"] = save_file(utils.image2str(img),
                                          content_type="image/jpeg")
                except Exception as e:
                    logger.warning("Error reading preview: {0}".format(e))
                    continue
                finally:
                    # Save.
                    self.results["preview"].append(p)
Ejemplo n.º 3
0
    def run(self):
        """Run data analysis."""
        # Create temporary file.
        handle, resaved = tempfile.mkstemp()

        # Open file and resave it.
        try:
            im = Image.open(self.file_path)
            im.save(resaved, "JPEG", quality=95)
            resaved_im = Image.open(resaved)
        except IOError as e:
            logger.warning("ELA error opening image: {0}".format(e))
            return
        finally:
            os.close(handle)
            os.remove(resaved)

        # Trick to convert images like PNG to a format comparable with JPEG.
        if im.mode != "RGB":
            im = im.convert("RGB")

        # Create ELA image.
        try:
            ela_im = ImageChops.difference(im, resaved_im)
        except Exception as e:
            logger.warning("Unable to calculate ELA difference: {0}".format(e))
            return

        # Calculate difference
        extrema = ela_im.getextrema()
        max_diff = max([ex[1] for ex in extrema])
        if not max_diff:
            return
        scale = 255.0 / max_diff
        ela_im = ImageEnhance.Brightness(ela_im).enhance(scale)
        self.results["max_difference"] = max([ex[1] for ex in extrema])

        # Resize image if it's too big.
        width, height = ela_im.size
        if width > 1800:
            ela_im.thumbnail([1800, 1800], Image.ANTIALIAS)

        # Save image.
        try:
            img = utils.image2str(ela_im)
            self.results["ela_image"] = save_file(img,
                                                  content_type="image/jpeg")
        except Exception as e:
            logger.warning("ELA error saving image: {0}".format(e))
        finally:
            return self.results
Ejemplo n.º 4
0
    def run(self):
        """Run data analysis."""
        # Create temporary file.
        handle, resaved = tempfile.mkstemp()

        # Open file and resave it.
        try:
            im = Image.open(self.file_path)
            im.save(resaved, "JPEG", quality=95)
            resaved_im = Image.open(resaved)
        except IOError as e:
            logger.warning("ELA error opening image: {0}".format(e))
            return
        finally:
            os.close(handle)
            os.remove(resaved)

        # Trick to convert images like PNG to a format comparable with JPEG.
        if im.mode != "RGB":
            im = im.convert("RGB")

        # Create ELA image.
        try:
            ela_im = ImageChops.difference(im, resaved_im)
        except Exception as e:
            logger.warning("Unable to calculate ELA difference: {0}".format(e))
            return

        # Calculate difference
        extrema = ela_im.getextrema()
        max_diff = max([ex[1] for ex in extrema])
        if not max_diff:
            return
        scale = 255.0 / max_diff
        ela_im = ImageEnhance.Brightness(ela_im).enhance(scale)
        self.results["max_difference"] = max([ex[1] for ex in extrema])

        # Resize image if it's too big.
        width, height = ela_im.size
        if width > 1800:
            ela_im.thumbnail([1800, 1800], Image.ANTIALIAS)

        # Save image.
        try:
            img = utils.image2str(ela_im)
            self.results["ela_image"] = save_file(img, content_type="image/jpeg")
        except Exception as e:
            logger.warning("ELA error saving image: {0}".format(e))
        finally:
            return self.results