Index: lams_central/src/java/org/lamsfoundation/lams/web/PortraitSaveAction.java =================================================================== diff -u -ra4fd7ba340a2beac7436660039f13b9c8708f172 -r1783f39beaef59b68da9b1f1fe51004326254e16 --- lams_central/src/java/org/lamsfoundation/lams/web/PortraitSaveAction.java (.../PortraitSaveAction.java) (revision a4fd7ba340a2beac7436660039f13b9c8708f172) +++ lams_central/src/java/org/lamsfoundation/lams/web/PortraitSaveAction.java (.../PortraitSaveAction.java) (revision 1783f39beaef59b68da9b1f1fe51004326254e16) @@ -120,8 +120,8 @@ } // upload to the content repository - originalFileNode = getCentralToolContentHandler().uploadFile(is, fileNameWithoutExt + "_original.png", - "image/png"); + originalFileNode = getCentralToolContentHandler().uploadFile(is, fileNameWithoutExt + "_original.jpg", + "image/jpeg"); is.close(); log.debug("saved file with uuid: " + originalFileNode.getUuid() + " and version: " + originalFileNode.getVersion()); @@ -130,23 +130,23 @@ is = ResizePictureUtil.resize(file.getInputStream(), IUserManagementService.PORTRAIT_LARGEST_DIMENSION_LARGE); NodeKey node = getCentralToolContentHandler().updateFile(originalFileNode.getUuid(), is, - fileNameWithoutExt + "_large.png", "image/png"); + fileNameWithoutExt + "_large.jpg", "image/jpeg"); is.close(); log.debug("saved file with uuid: " + node.getUuid() + " and version: " + node.getVersion()); //resize to the medium size is = ResizePictureUtil.resize(file.getInputStream(), IUserManagementService.PORTRAIT_LARGEST_DIMENSION_MEDIUM); - node = getCentralToolContentHandler().updateFile(node.getUuid(), is, fileNameWithoutExt + "_medium.png", - "image/png"); + node = getCentralToolContentHandler().updateFile(node.getUuid(), is, fileNameWithoutExt + "_medium.jpg", + "image/jpeg"); is.close(); log.debug("saved file with uuid: " + node.getUuid() + " and version: " + node.getVersion()); //resize to the small size is = ResizePictureUtil.resize(file.getInputStream(), IUserManagementService.PORTRAIT_LARGEST_DIMENSION_SMALL); - node = getCentralToolContentHandler().updateFile(node.getUuid(), is, fileNameWithoutExt + "_small.png", - "image/png"); + node = getCentralToolContentHandler().updateFile(node.getUuid(), is, fileNameWithoutExt + "_small.jpg", + "image/jpeg"); is.close(); log.debug("saved file with uuid: " + node.getUuid() + " and version: " + node.getVersion()); Index: lams_central/web/includes/javascript/webrtc-capturestill.js =================================================================== diff -u -rba7ef9fb0209892892930cb3583066b70880b08b -r1783f39beaef59b68da9b1f1fe51004326254e16 --- lams_central/web/includes/javascript/webrtc-capturestill.js (.../webrtc-capturestill.js) (revision ba7ef9fb0209892892930cb3583066b70880b08b) +++ lams_central/web/includes/javascript/webrtc-capturestill.js (.../webrtc-capturestill.js) (revision 1783f39beaef59b68da9b1f1fe51004326254e16) @@ -142,7 +142,10 @@ croppieWidget.croppie('bind', { url: objectURL }); - }); + }, + "image/jpeg", + 1 + ); //*LAMS* commented out by LAMS //var data = canvas.toDataURL('image/png'); Index: lams_central/web/portrait.jsp =================================================================== diff -u -r9854a395461bf77e72934605a08a95b73ce8e12b -r1783f39beaef59b68da9b1f1fe51004326254e16 --- lams_central/web/portrait.jsp (.../portrait.jsp) (revision 9854a395461bf77e72934605a08a95b73ce8e12b) +++ lams_central/web/portrait.jsp (.../portrait.jsp) (revision 1783f39beaef59b68da9b1f1fe51004326254e16) @@ -54,12 +54,7 @@ message : '

' }); - //Creates a Blob object representing the image contained in the canvas. Which we then upload to the server. - croppieWidget.croppie('result', 'blob').then(function(blob) { - var formData = new FormData(); - formData.append("file", blob); - uploadProtraitToServerSide(formData); - }); + uploadProtraitToServerSide(croppieWidget); }); //update dialog's height and title @@ -93,30 +88,37 @@ } }); $('#save-upload-button').on('click', function (ev) { - $uploadCroppie.croppie('result', 'blob').then(function(blob) { - var formData = new FormData(); - formData.append("file", blob); - uploadProtraitToServerSide(formData); - }); + uploadProtraitToServerSide($uploadCroppie); }); }); - function uploadPortraitFile() { - var formData = new FormData(document.getElementById("PortraitActionForm")); - uploadProtraitToServerSide(formData); - } - - function uploadProtraitToServerSide(formData) { - $.ajax({ - data : formData, - async : false, - processData : false, // tell jQuery not to process the data - contentType : false, // tell jQuery not to set contentType - type : $("#PortraitActionForm").attr('method'), - url : $("#PortraitActionForm").attr('action'), - success : function(data) { - window.parent.location.reload(); - } + //Creates a Blob object representing the image contained in the canvas. Which we then upload to the server. + function uploadProtraitToServerSide(uploadCroppie) { + uploadCroppie.croppie('result', { + type: 'blob', + size: { + width: PORTRAIT_SIZE, + height: PORTRAIT_SIZE, + }, + format: 'jpeg', + quality: 0.95, + backgroundColor: '#FFF', + }).then(function(blob) { + var formData = new FormData(); + formData.append("file", blob); + + //upload protrait to server side + $.ajax({ + data : formData, + async : false, + processData : false, // tell jQuery not to process the data + contentType : false, // tell jQuery not to set contentType + type : $("#PortraitActionForm").attr('method'), + url : $("#PortraitActionForm").attr('action'), + success : function(data) { + window.parent.location.reload(); + } + }); }); } Index: lams_common/src/java/org/lamsfoundation/lams/util/imgscalr/ResizePictureUtil.java =================================================================== diff -u -r4340b53d8412d3838eb7400ddfc821018234a1e9 -r1783f39beaef59b68da9b1f1fe51004326254e16 --- lams_common/src/java/org/lamsfoundation/lams/util/imgscalr/ResizePictureUtil.java (.../ResizePictureUtil.java) (revision 4340b53d8412d3838eb7400ddfc821018234a1e9) +++ lams_common/src/java/org/lamsfoundation/lams/util/imgscalr/ResizePictureUtil.java (.../ResizePictureUtil.java) (revision 1783f39beaef59b68da9b1f1fe51004326254e16) @@ -26,7 +26,11 @@ import java.io.IOException; import java.io.InputStream; +import javax.imageio.IIOImage; import javax.imageio.ImageIO; +import javax.imageio.ImageWriteParam; +import javax.imageio.ImageWriter; +import javax.imageio.stream.ImageOutputStream; import org.apache.log4j.Logger; import org.lamsfoundation.lams.util.CircularByteBuffer; @@ -66,8 +70,7 @@ /** * Reads the original image, creates a resized copy of it and returns its input stream. largestDimension is the - * largest - * dimension of the resized image, the other dimension is scaled accordingly. + * largest dimension of the resized image, the other dimension is scaled accordingly. * * @param image * original image @@ -81,13 +84,23 @@ try { //resize to 150 pixels max BufferedImage outImage = Scalr.resize(image, Method.QUALITY, largestDimension); + + //set jpeg compression quality explicitly + ImageWriter imageWriter = ImageIO.getImageWritersByFormatName("jpeg").next(); + ImageWriteParam jpgWriteParam = imageWriter.getDefaultWriteParam(); + jpgWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); + jpgWriteParam.setCompressionQuality(1); - // buffer all data in a circular buffer of infinite size - CircularByteBuffer cbb = new CircularByteBuffer(CircularByteBuffer.INFINITE_SIZE); - ImageIO.write(outImage, "PNG", cbb.getOutputStream()); - cbb.getOutputStream().close(); + // buffer all data in a circular buffer of infinite sizes + CircularByteBuffer outputBuffer = new CircularByteBuffer(CircularByteBuffer.INFINITE_SIZE); + ImageOutputStream ios = ImageIO.createImageOutputStream(outputBuffer.getOutputStream()); + imageWriter.setOutput(ios); + IIOImage outputImage = new IIOImage(outImage, null, null); + imageWriter.write(null, outputImage, jpgWriteParam); + imageWriter.dispose(); + outputBuffer.getOutputStream().close(); - return cbb.getInputStream(); + return outputBuffer.getInputStream(); } catch (IOException e) { log.error(e.getStackTrace()); Index: lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/ImageGalleryServiceImpl.java =================================================================== diff -u -r64ee69765400783a3e284e7856aa91cdd01f4831 -r1783f39beaef59b68da9b1f1fe51004326254e16 --- lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/ImageGalleryServiceImpl.java (.../ImageGalleryServiceImpl.java) (revision 64ee69765400783a3e284e7856aa91cdd01f4831) +++ lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/ImageGalleryServiceImpl.java (.../ImageGalleryServiceImpl.java) (revision 1783f39beaef59b68da9b1f1fe51004326254e16) @@ -573,9 +573,9 @@ // prepare medium image InputStream mediumIS = ResizePictureUtil.resize(originalImage, mediumImageDimensions); String mediumFileName = ImageGalleryServiceImpl.MEDIUM_FILENAME_PREFIX - + fileName.substring(0, fileName.indexOf('.')) + ".png"; + + fileName.substring(0, fileName.indexOf('.')) + ".jpg"; NodeKey mediumNodeKey = imageGalleryToolContentHandler.uploadFile(mediumIS, mediumFileName, - "image/png"); + "image/jpeg"); image.setMediumFileUuid(mediumNodeKey.getUuid()); //store MediumImageWidth and MediumImageHeight InputStream mediumIS2 = imageGalleryToolContentHandler.getFileNode(mediumNodeKey.getUuid()).getFile(); @@ -588,23 +588,17 @@ InputStream originalIS2 = imageGalleryToolContentHandler.getFileNode(nodeKey.getUuid()).getFile(); InputStream thumbnailIS = ResizePictureUtil.resize(originalIS2, thumbnailImageDimensions); String thumbnailFileName = ImageGalleryServiceImpl.THUMBNAIL_FILENAME_PREFIX - + fileName.substring(0, fileName.indexOf('.')) + ".png"; + + fileName.substring(0, fileName.indexOf('.')) + ".jpg"; NodeKey thumbnailNodeKey = imageGalleryToolContentHandler.uploadFile(thumbnailIS, thumbnailFileName, - "image/png"); + "image/jpeg"); image.setThumbnailFileUuid(thumbnailNodeKey.getUuid()); } catch (RepositoryCheckedException e) { - ImageGalleryServiceImpl.log - .error(messageService.getMessage("error.msg.repository.checked.exception") + ":" + e.toString()); throw new UploadImageGalleryFileException( messageService.getMessage("error.msg.repository.checked.exception")); } catch (NumberFormatException e) { - ImageGalleryServiceImpl.log - .error(messageService.getMessage("error.msg.number.format.exception") + ":" + e.toString()); throw new UploadImageGalleryFileException(messageService.getMessage("error.msg.number.format.exception")); } catch (IOException e) { - ImageGalleryServiceImpl.log - .error(messageService.getMessage("error.msg.io.exception.resizing") + ":" + e.toString()); throw new ImageGalleryException(messageService.getMessage("error.msg.io.exception.resizing")); } }