From 55381fd9be1be5529203d0f59717bb127940d75c Mon Sep 17 00:00:00 2001 From: jmillman Date: Tue, 12 Jan 2016 16:29:11 -0500 Subject: [PATCH] fix some image reading bugs, to preserve animated gifs, and contain failure to read swf files. --- .../autopsy/coreutils/ImageUtils.java | 24 +++++++++++++------ .../autopsy/coreutils/VideoUtils.java | 8 +++---- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/ImageUtils.java b/Core/src/org/sleuthkit/autopsy/coreutils/ImageUtils.java index dffa245f48..33817636cd 100755 --- a/Core/src/org/sleuthkit/autopsy/coreutils/ImageUtils.java +++ b/Core/src/org/sleuthkit/autopsy/coreutils/ImageUtils.java @@ -429,6 +429,7 @@ public class ImageUtils { String cacheDirectory = Case.getCurrentCase().getCacheDirectory(); return Paths.get(cacheDirectory, "thumbnails", fileID + ".png").toFile(); //NOI18N } catch (IllegalStateException e) { + LOGGER.log(Level.WARNING, "Could not get cached thumbnail location. No case is open."); return null; } @@ -656,6 +657,10 @@ public class ImageUtils { @Override protected javafx.scene.image.Image call() throws Exception { + if (isGIF(file)) { + return readImage(); + } + // If a thumbnail file is already saved locally, just read that. if (cacheFile != null && cacheFile.exists()) { try { @@ -670,18 +675,21 @@ public class ImageUtils { //There was no correctly-sized cached thumbnail so make one. BufferedImage thumbnail = null; + if (VideoUtils.isVideoThumbnailSupported(file)) { if (openCVLoaded) { updateMessage(Bundle.GetOrGenerateThumbnailTask_generatingPreviewFor(file.getName())); thumbnail = VideoUtils.generateVideoThumbnail(file, iconSize); - } else if (defaultOnFailure) { - thumbnail = DEFAULT_THUMBNAIL; - } else { - throw new IIOException("Failed to read image for thumbnail generation."); } - + if (null == thumbnail) { + if (defaultOnFailure) { + thumbnail = DEFAULT_THUMBNAIL; + } else { + throw new IIOException("Failed to read image for thumbnail generation."); + } + } } else { - //read the image into abuffered image. + //read the image into a buffered image. BufferedImage bufferedImage = SwingFXUtils.fromFXImage(readImage(), null); if (null == bufferedImage) { LOGGER.log(Level.WARNING, FAILED_TO_READ_IMAGE_FOR_THUMBNAIL_GENERATION); @@ -717,9 +725,10 @@ public class ImageUtils { updateProgress(-1, 1); //if we got a valid thumbnail save it - if (cacheFile != null && nonNull(thumbnail) && DEFAULT_THUMBNAIL != thumbnail) { + if ((cacheFile != null) && nonNull(thumbnail) && DEFAULT_THUMBNAIL != thumbnail) { saveThumbnail(thumbnail); } + return SwingFXUtils.toFXImage(thumbnail, null); } @@ -875,6 +884,7 @@ public class ImageUtils { protected void failed() { super.failed(); LOGGER.log(Level.WARNING, IMAGE_IO_COULD_NOT_READ_UNSUPPORTE_OR_CORRUPT + ": " + ObjectUtils.toString(getException()), ImageUtils.getContentPathSafe(file)); +// Exceptions.printStackTrace(getException()); } @Override diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/VideoUtils.java b/Core/src/org/sleuthkit/autopsy/coreutils/VideoUtils.java index 40569e8ec0..eeedf64915 100644 --- a/Core/src/org/sleuthkit/autopsy/coreutils/VideoUtils.java +++ b/Core/src/org/sleuthkit/autopsy/coreutils/VideoUtils.java @@ -43,8 +43,8 @@ import org.sleuthkit.datamodel.AbstractFile; */ public class VideoUtils { - private static final List SUPPORTED_VIDEO_EXTENSIONS - = Arrays.asList("mov", "m4v", "flv", "mp4", "3gp", "avi", "mpg", + private static final List SUPPORTED_VIDEO_EXTENSIONS = + Arrays.asList("mov", "m4v", "flv", "mp4", "3gp", "avi", "mpg", "mpeg", "asf", "divx", "rm", "moov", "wmv", "vob", "dat", "m1v", "m2v", "m4v", "mkv", "mpe", "yop", "vqa", "xmv", "mve", "wtv", "webm", "vivo", "vc1", "seq", "thp", "san", @@ -58,7 +58,7 @@ public class VideoUtils { "flm", "tmv", "4xm"); //NON-NLS private static final SortedSet SUPPORTED_VIDEO_MIME_TYPES = new TreeSet<>( - Arrays.asList("application/x-shockwave-flash", "video/x-m4v", "video/quicktime", "video/avi", "video/msvideo", "video/x-msvideo", + Arrays.asList("application/x-shockwave-flash", "video/x-m4v", "video/x-flv", "video/quicktime", "video/avi", "video/msvideo", "video/x-msvideo", "video/mp4", "video/x-ms-wmv", "video/mpeg", "video/asf")); //NON-NLS private static final List CONDITIONAL_MIME_TYPES = Arrays.asList("application/octet-stream"); @@ -160,6 +160,6 @@ public class VideoUtils { videoFile.release(); // close the file - return bufferedImage == null ? bufferedImage : ScalrWrapper.resizeFast(bufferedImage, iconSize); + return bufferedImage == null ? null : ScalrWrapper.resizeFast(bufferedImage, iconSize); } }