From be44a827b1607cd1b5491e4873c1577fa3fc8b9d Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Tue, 14 Apr 2020 11:50:35 -0400 Subject: [PATCH 1/4] change DEFAULT_THUMBNAIL_SIZE from 64 to 140 #6769 --- doc/sphinx-guides/source/api/dataaccess.rst | 4 ++-- .../dataaccess/ImageThumbConverter.java | 2 +- .../harvard/iq/dataverse/api/SearchIT.java | 21 +++++++++++++++++++ .../edu/harvard/iq/dataverse/api/UtilIT.java | 9 ++++++++ 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/doc/sphinx-guides/source/api/dataaccess.rst b/doc/sphinx-guides/source/api/dataaccess.rst index 0e2e338404d..262d25f02e0 100755 --- a/doc/sphinx-guides/source/api/dataaccess.rst +++ b/doc/sphinx-guides/source/api/dataaccess.rst @@ -58,8 +58,8 @@ the following parameter values are supported (for image and pdf files only): ============== =========== Value Description ============== =========== -true Generates a thumbnail image, by rescaling to the default thumbnail size (64 pixels) -``N`` Rescales the image to ``N`` pixels. +true Generates a thumbnail image by rescaling to the default thumbnail size (140 pixels wide). +``N`` Rescales the image to ``N`` pixels wide. ``imageThumb=true`` and ``imageThumb=140`` are equivalent. ============== =========== Multiple File ("bundle") download diff --git a/src/main/java/edu/harvard/iq/dataverse/dataaccess/ImageThumbConverter.java b/src/main/java/edu/harvard/iq/dataverse/dataaccess/ImageThumbConverter.java index 81b10567a78..2aba16fc05e 100644 --- a/src/main/java/edu/harvard/iq/dataverse/dataaccess/ImageThumbConverter.java +++ b/src/main/java/edu/harvard/iq/dataverse/dataaccess/ImageThumbConverter.java @@ -62,7 +62,7 @@ public class ImageThumbConverter { public static String THUMBNAIL_MIME_TYPE = "image/png"; public static int DEFAULT_CARDIMAGE_SIZE = 48; - public static int DEFAULT_THUMBNAIL_SIZE = 64; + public static int DEFAULT_THUMBNAIL_SIZE = 140; public static int DEFAULT_PREVIEW_SIZE = 400; private static final Logger logger = Logger.getLogger(ImageThumbConverter.class.getCanonicalName()); diff --git a/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java b/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java index c83afc1470c..f28a815cd8e 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java @@ -23,8 +23,11 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import edu.harvard.iq.dataverse.dataaccess.ImageThumbConverter; +import java.awt.image.BufferedImage; +import java.io.IOException; import static junit.framework.Assert.assertEquals; import static java.lang.Thread.sleep; +import javax.imageio.ImageIO; import static javax.ws.rs.core.Response.Status.CREATED; import static javax.ws.rs.core.Response.Status.NOT_FOUND; import static javax.ws.rs.core.Response.Status.OK; @@ -429,6 +432,24 @@ public void testDatasetThumbnail() { .contentType("image/png") .statusCode(OK.getStatusCode()); + String trueOrWidthInPixels = "true"; + Response getFileThumbnailImageA = UtilIT.getFileThumbnail(dataFileId1.toString(), trueOrWidthInPixels, apiToken); + getFileThumbnailImageA.then().assertThat() + .contentType("image/png") + .statusCode(OK.getStatusCode()); + + try { + BufferedImage bufferedImage = ImageIO.read(getFileThumbnailImageA.body().asInputStream()); + int width = bufferedImage.getWidth(); + int height = bufferedImage.getHeight(); + System.out.println("width: " + width); + System.out.println("height: " + height); + int expectedWidth = 140; + assertEquals(expectedWidth, width); + } catch (IOException ex) { + Logger.getLogger(SearchIT.class.getName()).log(Level.SEVERE, null, ex); + } + InputStream inputStream2creator = UtilIT.getInputStreamFromUnirest(thumbnailUrl, apiToken); assertEquals(treesAsBase64, UtilIT.inputStreamToDataUrlSchemeBase64Png(inputStream2creator)); diff --git a/src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java b/src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java index 4507c18eb89..cff2ce4e3d5 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java @@ -1360,6 +1360,15 @@ static Response getDatasetThumbnailMetadata(Integer datasetId, String apiToken) .get("/api/admin/datasets/thumbnailMetadata/" + datasetId); } + /** + * @param trueOrWidthInPixels Passing "true" will result in the default width in pixels (64). + */ + static Response getFileThumbnail(String fileDatabaseId, String trueOrWidthInPixels, String apiToken) { + return given() + .header(API_TOKEN_HTTP_HEADER, apiToken) + .get("/api/access/datafile/" + fileDatabaseId + "?imageThumb=" + trueOrWidthInPixels); + } + static Response useThumbnailFromDataFile(String datasetPersistentId, long dataFileId1, String apiToken) { return given() .header(API_TOKEN_HTTP_HEADER, apiToken) From f7017e578bbc8710c2ea98af89bbc09bb5109814 Mon Sep 17 00:00:00 2001 From: Michael Heppler Date: Wed, 15 Apr 2020 13:03:55 -0400 Subject: [PATCH 2/4] Fixed size of file thumbnail on dataset pg, edit file pg, replace file pg [ref #6769] --- src/main/webapp/resources/css/structure.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/webapp/resources/css/structure.css b/src/main/webapp/resources/css/structure.css index 1cec41ed9b8..4560f577a34 100644 --- a/src/main/webapp/resources/css/structure.css +++ b/src/main/webapp/resources/css/structure.css @@ -747,6 +747,7 @@ div[id$="filesTable"] .col-file-thumb {padding:4px 10px; width:84px;} div[id$="filesTable"] .col-file-thumb div.thumbnail-block {position:relative;width:64px;height:64px;margin:0 auto;} div[id$="filesTable"] .col-file-thumb div.thumbnail-block span.file-thumbnail-icon {font-size:62px;line-height:1.05;} div[id$="filesTable"] .col-file-thumb div.thumbnail-block span.file-thumbnail-preview-img {display:block;} +div[id$="filesTable"] .col-file-thumb div.thumbnail-block span.file-thumbnail-preview-img img {max-width:64px; max-height:64px;} div[id$="filesTable"] .col-file-thumb div.thumbnail-block div.file-icon-restricted-block {display:block;position:absolute;bottom:-4px;right:-1px;} div[id$="filesTable"] .file-metadata-block {-webkit-flex: 1 100%; -moz-flex: 1 100%; From aed6d8374d869b5cfffd36dfd8b9df934ad793ca Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Thu, 16 Apr 2020 14:10:00 -0400 Subject: [PATCH 3/4] new dataset thumbnail variable, revert previous #6769 --- .gitignore | 5 +++++ .../edu/harvard/iq/dataverse/DatasetWidgetsPage.java | 4 ++-- .../harvard/iq/dataverse/ThumbnailServiceWrapper.java | 5 ++--- .../iq/dataverse/dataaccess/ImageThumbConverter.java | 3 ++- .../edu/harvard/iq/dataverse/dataset/DatasetUtil.java | 10 +++++----- src/main/webapp/resources/css/structure.css | 1 - .../java/edu/harvard/iq/dataverse/api/SearchIT.java | 8 ++++---- 7 files changed, 20 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 2904bc578f2..ec135fb3618 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,8 @@ scripts/installer/default.config tests/node_modules tests/package-lock.json venv + +# from thumbnail tests in SearchIT +scripts/search/data/binary/trees.png.thumb140 +src/main/webapp/resources/images/cc0.png.thumb140 +src/main/webapp/resources/images/dataverseproject.png.thumb140 diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetWidgetsPage.java b/src/main/java/edu/harvard/iq/dataverse/DatasetWidgetsPage.java index 353c7e8739b..463bf2949a9 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetWidgetsPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetWidgetsPage.java @@ -117,7 +117,7 @@ public void setDatasetFileThumbnailToSwitchTo(DataFile datasetFileThumbnailToSwi public void setDataFileAsThumbnail() { logger.fine("setDataFileAsThumbnail clicked"); updateDatasetThumbnailCommand = new UpdateDatasetThumbnailCommand(dvRequestService.getDataverseRequest(), dataset, UpdateDatasetThumbnailCommand.UserIntent.setDatasetFileAsThumbnail, datasetFileThumbnailToSwitchTo.getId(), null); - String base64image = ImageThumbConverter.getImageThumbnailAsBase64(datasetFileThumbnailToSwitchTo, ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE); + String base64image = ImageThumbConverter.getImageThumbnailAsBase64(datasetFileThumbnailToSwitchTo, ImageThumbConverter.DEFAULT_DATASET_THUMBNAIL_SIZE); datasetThumbnail = new DatasetThumbnail(base64image, datasetFileThumbnailToSwitchTo); } @@ -146,7 +146,7 @@ public void handleImageFileUpload(FileUploadEvent event) { Logger.getLogger(DatasetWidgetsPage.class.getName()).log(Level.SEVERE, null, ex); return; } - String base64image = ImageThumbConverter.generateImageThumbnailFromFileAsBase64(file, ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE); + String base64image = ImageThumbConverter.generateImageThumbnailFromFileAsBase64(file, ImageThumbConverter.DEFAULT_DATASET_THUMBNAIL_SIZE); if (base64image != null) { datasetThumbnail = new DatasetThumbnail(base64image, datasetFileThumbnailToSwitchTo); } else { diff --git a/src/main/java/edu/harvard/iq/dataverse/ThumbnailServiceWrapper.java b/src/main/java/edu/harvard/iq/dataverse/ThumbnailServiceWrapper.java index 51d803c5e02..e11c8eb03e1 100644 --- a/src/main/java/edu/harvard/iq/dataverse/ThumbnailServiceWrapper.java +++ b/src/main/java/edu/harvard/iq/dataverse/ThumbnailServiceWrapper.java @@ -70,9 +70,8 @@ private String getAssignedDatasetImage(Dataset dataset) { return null; } - String imageSourceBase64 = ImageThumbConverter.getImageThumbnailAsBase64( - assignedThumbnailFile, - ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE); + String imageSourceBase64 = ImageThumbConverter.getImageThumbnailAsBase64(assignedThumbnailFile, + ImageThumbConverter.DEFAULT_DATASET_THUMBNAIL_SIZE); if (imageSourceBase64 != null) { this.dvobjectThumbnailsMap.put(assignedThumbnailFileId, imageSourceBase64); diff --git a/src/main/java/edu/harvard/iq/dataverse/dataaccess/ImageThumbConverter.java b/src/main/java/edu/harvard/iq/dataverse/dataaccess/ImageThumbConverter.java index 2aba16fc05e..196c2659cc1 100644 --- a/src/main/java/edu/harvard/iq/dataverse/dataaccess/ImageThumbConverter.java +++ b/src/main/java/edu/harvard/iq/dataverse/dataaccess/ImageThumbConverter.java @@ -62,7 +62,8 @@ public class ImageThumbConverter { public static String THUMBNAIL_MIME_TYPE = "image/png"; public static int DEFAULT_CARDIMAGE_SIZE = 48; - public static int DEFAULT_THUMBNAIL_SIZE = 140; + public static int DEFAULT_THUMBNAIL_SIZE = 64; + public static int DEFAULT_DATASET_THUMBNAIL_SIZE = 140; public static int DEFAULT_PREVIEW_SIZE = 400; private static final Logger logger = Logger.getLogger(ImageThumbConverter.class.getCanonicalName()); diff --git a/src/main/java/edu/harvard/iq/dataverse/dataset/DatasetUtil.java b/src/main/java/edu/harvard/iq/dataverse/dataset/DatasetUtil.java index a5931da26f4..6b6cb1bbd5b 100644 --- a/src/main/java/edu/harvard/iq/dataverse/dataset/DatasetUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/dataset/DatasetUtil.java @@ -88,7 +88,7 @@ public static List getThumbnailCandidates(Dataset dataset, boo && ImageThumbConverter.isThumbnailAvailable(dataFile) && !dataFile.isRestricted()) { String imageSourceBase64 = null; - imageSourceBase64 = ImageThumbConverter.getImageThumbnailAsBase64(dataFile, ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE); + imageSourceBase64 = ImageThumbConverter.getImageThumbnailAsBase64(dataFile, ImageThumbConverter.DEFAULT_DATASET_THUMBNAIL_SIZE); if (imageSourceBase64 != null) { DatasetThumbnail datasetThumbnail = new DatasetThumbnail(imageSourceBase64, dataFile); @@ -160,7 +160,7 @@ public static DatasetThumbnail getThumbnail(Dataset dataset, DatasetVersion data logger.fine("Dataset (id :" + dataset.getId() + ") does not have a thumbnail available that could be selected automatically."); return null; } else { - String imageSourceBase64 = ImageThumbConverter.getImageThumbnailAsBase64(thumbnailFile, ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE); + String imageSourceBase64 = ImageThumbConverter.getImageThumbnailAsBase64(thumbnailFile, ImageThumbConverter.DEFAULT_DATASET_THUMBNAIL_SIZE); DatasetThumbnail defaultDatasetThumbnail = new DatasetThumbnail(imageSourceBase64, thumbnailFile); logger.fine("thumbnailFile (id :" + thumbnailFile.getId() + ") will get thumbnail through automatic selection from DataFile id " + thumbnailFile.getId()); return defaultDatasetThumbnail; @@ -170,7 +170,7 @@ public static DatasetThumbnail getThumbnail(Dataset dataset, DatasetVersion data logger.fine("Dataset (id :" + dataset.getId() + ") has a thumbnail the user selected but the file must have later been restricted. Returning null."); return null; } else { - String imageSourceBase64 = ImageThumbConverter.getImageThumbnailAsBase64(thumbnailFile, ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE); + String imageSourceBase64 = ImageThumbConverter.getImageThumbnailAsBase64(thumbnailFile, ImageThumbConverter.DEFAULT_DATASET_THUMBNAIL_SIZE); DatasetThumbnail userSpecifiedDatasetThumbnail = new DatasetThumbnail(imageSourceBase64, thumbnailFile); logger.fine("Dataset (id :" + dataset.getId() + ") will get thumbnail the user specified from DataFile id " + thumbnailFile.getId()); return userSpecifiedDatasetThumbnail; @@ -252,7 +252,7 @@ public static DataFile attemptToAutomaticallySelectThumbnailFromDataFiles(Datase for (FileMetadata fmd : datasetVersion.getFileMetadatas()) { DataFile testFile = fmd.getDataFile(); // We don't want to use a restricted image file as the dedicated thumbnail: - if (!testFile.isRestricted() && FileUtil.isThumbnailSupported(testFile) && ImageThumbConverter.isThumbnailAvailable(testFile, ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE)) { + if (!testFile.isRestricted() && FileUtil.isThumbnailSupported(testFile) && ImageThumbConverter.isThumbnailAvailable(testFile, ImageThumbConverter.DEFAULT_DATASET_THUMBNAIL_SIZE)) { return testFile; } } @@ -329,7 +329,7 @@ public static Dataset persistDatasetLogoToStorageAndCreateThumbnail(Dataset data logger.severe(ex.getMessage()); return null; } - String thumbFileLocation = ImageThumbConverter.rescaleImage(fullSizeImage, width, height, ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE, tmpFileForResize.toPath().toString()); + String thumbFileLocation = ImageThumbConverter.rescaleImage(fullSizeImage, width, height, ImageThumbConverter.DEFAULT_DATASET_THUMBNAIL_SIZE, tmpFileForResize.toPath().toString()); logger.fine("thumbFileLocation = " + thumbFileLocation); logger.fine("tmpFileLocation=" + tmpFileForResize.toPath().toString()); //now we must save the updated thumbnail diff --git a/src/main/webapp/resources/css/structure.css b/src/main/webapp/resources/css/structure.css index 4560f577a34..1cec41ed9b8 100644 --- a/src/main/webapp/resources/css/structure.css +++ b/src/main/webapp/resources/css/structure.css @@ -747,7 +747,6 @@ div[id$="filesTable"] .col-file-thumb {padding:4px 10px; width:84px;} div[id$="filesTable"] .col-file-thumb div.thumbnail-block {position:relative;width:64px;height:64px;margin:0 auto;} div[id$="filesTable"] .col-file-thumb div.thumbnail-block span.file-thumbnail-icon {font-size:62px;line-height:1.05;} div[id$="filesTable"] .col-file-thumb div.thumbnail-block span.file-thumbnail-preview-img {display:block;} -div[id$="filesTable"] .col-file-thumb div.thumbnail-block span.file-thumbnail-preview-img img {max-width:64px; max-height:64px;} div[id$="filesTable"] .col-file-thumb div.thumbnail-block div.file-icon-restricted-block {display:block;position:absolute;bottom:-4px;right:-1px;} div[id$="filesTable"] .file-metadata-block {-webkit-flex: 1 100%; -moz-flex: 1 100%; diff --git a/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java b/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java index f28a815cd8e..ac541cf9488 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java @@ -334,7 +334,7 @@ public void testDatasetThumbnail() { File trees = new File("scripts/search/data/binary/trees.png"); String treesAsBase64 = null; - treesAsBase64 = ImageThumbConverter.generateImageThumbnailFromFileAsBase64(trees, ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE); + treesAsBase64 = ImageThumbConverter.generateImageThumbnailFromFileAsBase64(trees, ImageThumbConverter.DEFAULT_DATASET_THUMBNAIL_SIZE); if (treesAsBase64 == null) { Logger.getLogger(SearchIT.class.getName()).log(Level.SEVERE, "Failed to generate a base64 thumbnail from the file trees.png"); @@ -444,7 +444,7 @@ public void testDatasetThumbnail() { int height = bufferedImage.getHeight(); System.out.println("width: " + width); System.out.println("height: " + height); - int expectedWidth = 140; + int expectedWidth = 64; assertEquals(expectedWidth, width); } catch (IOException ex) { Logger.getLogger(SearchIT.class.getName()).log(Level.SEVERE, null, ex); @@ -495,7 +495,7 @@ public void testDatasetThumbnail() { File dataverseProjectLogo = new File(pathToFile); String dataverseProjectLogoAsBase64 = null; - dataverseProjectLogoAsBase64 = ImageThumbConverter.generateImageThumbnailFromFileAsBase64(dataverseProjectLogo, ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE); + dataverseProjectLogoAsBase64 = ImageThumbConverter.generateImageThumbnailFromFileAsBase64(dataverseProjectLogo, ImageThumbConverter.DEFAULT_DATASET_THUMBNAIL_SIZE); if (dataverseProjectLogoAsBase64 == null) { Logger.getLogger(SearchIT.class.getName()).log(Level.SEVERE, "Failed to generate a base64 thumbnail from the file dataverseproject.png"); @@ -556,7 +556,7 @@ public void testDatasetThumbnail() { String datasetLogo = "src/main/webapp/resources/images/cc0.png"; File datasetLogoFile = new File(datasetLogo); - String datasetLogoAsBase64 = datasetLogoAsBase64 = ImageThumbConverter.generateImageThumbnailFromFileAsBase64(datasetLogoFile, ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE); + String datasetLogoAsBase64 = datasetLogoAsBase64 = ImageThumbConverter.generateImageThumbnailFromFileAsBase64(datasetLogoFile, ImageThumbConverter.DEFAULT_DATASET_THUMBNAIL_SIZE); if (datasetLogoAsBase64 == null) { Logger.getLogger(SearchIT.class.getName()).log(Level.SEVERE, "Failed to generate a base64 thumbnail from the file dataverseproject.png"); From 17ae5e1599dba6582e0d5bda22498211e5168a3a Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Thu, 16 Apr 2020 14:17:45 -0400 Subject: [PATCH 4/4] reverts docs to 64 pixels wide #6769 --- doc/sphinx-guides/source/api/dataaccess.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/sphinx-guides/source/api/dataaccess.rst b/doc/sphinx-guides/source/api/dataaccess.rst index 262d25f02e0..ab767f435dd 100755 --- a/doc/sphinx-guides/source/api/dataaccess.rst +++ b/doc/sphinx-guides/source/api/dataaccess.rst @@ -58,8 +58,8 @@ the following parameter values are supported (for image and pdf files only): ============== =========== Value Description ============== =========== -true Generates a thumbnail image by rescaling to the default thumbnail size (140 pixels wide). -``N`` Rescales the image to ``N`` pixels wide. ``imageThumb=true`` and ``imageThumb=140`` are equivalent. +true Generates a thumbnail image by rescaling to the default thumbnail size (64 pixels wide). +``N`` Rescales the image to ``N`` pixels wide. ``imageThumb=true`` and ``imageThumb=64`` are equivalent. ============== =========== Multiple File ("bundle") download