Search in sources :

Example 56 with Size

use of org.olat.core.commons.services.image.Size in project OpenOLAT by OpenOLAT.

the class ImageHelperImpl method calcScaledSize.

private static SizeAndBufferedImage calcScaledSize(ImageInputStream stream, String suffix, int maxWidth, int maxHeight, boolean fill) {
    Iterator<ImageReader> iter = ImageIO.getImageReadersBySuffix(suffix);
    if (iter.hasNext()) {
        ImageReader reader = iter.next();
        try {
            reader.setInput(stream, true, true);
            int width = reader.getWidth(reader.getMinIndex());
            int height = reader.getHeight(reader.getMinIndex());
            Size size = new Size(width, height, false);
            Size scaledSize = computeScaledSize(width, height, maxWidth, maxHeight, fill);
            SizeAndBufferedImage all = new SizeAndBufferedImage(size, scaledSize);
            int readerMinIndex = reader.getMinIndex();
            ImageReadParam param = reader.getDefaultReadParam();
            Iterator<ImageTypeSpecifier> imageTypes = reader.getImageTypes(0);
            while (imageTypes.hasNext()) {
                try {
                    ImageTypeSpecifier imageTypeSpecifier = imageTypes.next();
                    int bufferedImageType = imageTypeSpecifier.getBufferedImageType();
                    if (bufferedImageType == BufferedImage.TYPE_BYTE_GRAY) {
                        param.setDestinationType(imageTypeSpecifier);
                    }
                    double memoryKB = (width * height * 4) / 1024d;
                    if (memoryKB > 2000) {
                        // check limit at 20MB
                        double free = Runtime.getRuntime().freeMemory() / 1024d;
                        if (free > memoryKB) {
                            all.setImage(reader.read(readerMinIndex, param));
                        } else {
                            // make sub sampling to save memory
                            int ratio = (int) Math.round(Math.sqrt(memoryKB / free));
                            param.setSourceSubsampling(ratio, ratio, 0, 0);
                            all.setImage(reader.read(readerMinIndex, param));
                        }
                    } else {
                        all.setImage(reader.read(readerMinIndex, param));
                    }
                    return all;
                } catch (IllegalArgumentException e) {
                    log.warn(e.getMessage(), e);
                }
            }
        } catch (IOException e) {
            log.error(e.getMessage(), e);
        } finally {
            reader.dispose();
        }
    } else {
        log.error("No reader found for given format: " + suffix, null);
    }
    return null;
}
Also used : ImageReadParam(javax.imageio.ImageReadParam) Size(org.olat.core.commons.services.image.Size) IOException(java.io.IOException) ImageReader(javax.imageio.ImageReader) ImageTypeSpecifier(javax.imageio.ImageTypeSpecifier)

Example 57 with Size

use of org.olat.core.commons.services.image.Size in project OpenOLAT by OpenOLAT.

the class ImageMagickHelper method scaleImage.

@Override
public Size scaleImage(File image, String imgExt, VFSLeaf scaledImage, int maxWidth, int maxHeight) {
    File scaledBaseFile = extractIOFile(scaledImage);
    FinalSize finalSize = generateThumbnail(image, scaledBaseFile, false, maxWidth, maxHeight, false);
    if (finalSize != null) {
        return new Size(finalSize.getWidth(), finalSize.getHeight(), true);
    }
    return null;
}
Also used : FinalSize(org.olat.core.commons.services.thumbnail.FinalSize) Size(org.olat.core.commons.services.image.Size) FinalSize(org.olat.core.commons.services.thumbnail.FinalSize) File(java.io.File)

Example 58 with Size

use of org.olat.core.commons.services.image.Size in project OpenOLAT by OpenOLAT.

the class FileLinkChooserController method getSize.

private Size getSize(VFSItem item, String filename) {
    Size size = null;
    if (item instanceof VFSLeaf) {
        VFSLeaf leaf = (VFSLeaf) item;
        String suffix = FileUtils.getFileSuffix(filename);
        size = movieService.getSize(leaf, suffix);
    }
    return size;
}
Also used : VFSLeaf(org.olat.core.util.vfs.VFSLeaf) Size(org.olat.core.commons.services.image.Size)

Example 59 with Size

use of org.olat.core.commons.services.image.Size in project OpenOLAT by OpenOLAT.

the class FileLinkChooserController method event.

@Override
public void event(UserRequest ureq, Controller source, Event event) {
    if (source == uploadCtr) {
        if (event instanceof FolderEvent) {
            FolderEvent folderEvent = (FolderEvent) event;
            if (isFileSuffixOk(folderEvent.getFilename())) {
                Size size = null;
                VFSItem item = folderEvent.getItem();
                String relPath;
                if (item != null) {
                    size = getSize(item, item.getName());
                    relPath = FileChooserUIFactory.getSelectedRelativeItemPath(folderEvent, rootDir, fileName);
                } else {
                    relPath = folderEvent.getFilename();
                }
                if (StringHelper.containsNonWhitespace(absolutePath)) {
                    relPath = absolutePath + relPath;
                }
                if (size != null) {
                    fireEvent(ureq, new URLChoosenEvent(relPath, null, null, null, size.getWidth(), size.getHeight()));
                } else {
                    fireEvent(ureq, new URLChoosenEvent(relPath));
                }
            } else {
                setErrorMessage(folderEvent.getFilename());
            }
        }
        if (event == Event.DONE_EVENT) {
            if (uploadCtr.getStatus() == FolderCommandStatus.STATUS_CANCELED) {
                fireEvent(ureq, Event.CANCELLED_EVENT);
            }
        } else if (event == Event.CANCELLED_EVENT) {
            fireEvent(ureq, Event.CANCELLED_EVENT);
        } else if (event == Event.FAILED_EVENT) {
            fireEvent(ureq, Event.CANCELLED_EVENT);
        }
    } else if (source == fileChooserController) {
        if (event instanceof FileChoosenEvent) {
            FileChoosenEvent fileEvent = (FileChoosenEvent) event;
            VFSItem item = fileEvent.getSelectedItem();
            Size size = getSize(item, item.getName());
            String relPath = FileChooserUIFactory.getSelectedRelativeItemPath(fileEvent, rootDir, fileName);
            // notify parent controller
            if (StringHelper.containsNonWhitespace(absolutePath)) {
                relPath = absolutePath + relPath;
            }
            if (size != null) {
                fireEvent(ureq, new URLChoosenEvent(relPath, null, null, null, size.getWidth(), size.getHeight()));
            } else {
                fireEvent(ureq, new URLChoosenEvent(relPath));
            }
        } else if (event == Event.CANCELLED_EVENT) {
            fireEvent(ureq, Event.CANCELLED_EVENT);
        } else if (event == Event.FAILED_EVENT) {
            fireEvent(ureq, Event.CANCELLED_EVENT);
        }
    }
}
Also used : Size(org.olat.core.commons.services.image.Size) VFSItem(org.olat.core.util.vfs.VFSItem) FolderEvent(org.olat.core.commons.modules.bc.FolderEvent) FileChoosenEvent(org.olat.core.commons.controllers.filechooser.FileChoosenEvent)

Example 60 with Size

use of org.olat.core.commons.services.image.Size in project OpenOLAT by OpenOLAT.

the class DrawingEditorController method formOK.

@Override
protected void formOK(UserRequest ureq) {
    if (readOnly)
        return;
    // title
    itemBuilder.setTitle(titleEl.getValue());
    File objectImg = null;
    if (backgroundImage != null) {
        objectImg = backgroundImage;
    } else if (initialBackgroundImage != null) {
        objectImg = initialBackgroundImage;
    }
    if (objectImg != null) {
        String filename = objectImg.getName();
        String mimeType = WebappHelper.getMimeType(filename);
        Size size = imageService.getSize(new LocalFileImpl(objectImg), null);
        int height = -1;
        int width = -1;
        if (size != null) {
            height = size.getHeight();
            width = size.getWidth();
        }
        itemBuilder.setBackground(filename, mimeType, height, width);
    }
    // question
    String questionText = textEl.getRawValue();
    itemBuilder.setQuestion(questionText);
    fireEvent(ureq, new AssessmentItemEvent(AssessmentItemEvent.ASSESSMENT_ITEM_CHANGED, itemBuilder.getAssessmentItem(), QTI21QuestionType.drawing));
}
Also used : Size(org.olat.core.commons.services.image.Size) LocalFileImpl(org.olat.core.util.vfs.LocalFileImpl) File(java.io.File) AssessmentItemEvent(org.olat.ims.qti21.ui.editor.events.AssessmentItemEvent)

Aggregations

Size (org.olat.core.commons.services.image.Size)76 File (java.io.File)24 IOException (java.io.IOException)22 LocalFileImpl (org.olat.core.util.vfs.LocalFileImpl)22 VFSLeaf (org.olat.core.util.vfs.VFSLeaf)20 VFSContainer (org.olat.core.util.vfs.VFSContainer)14 FileInputStream (java.io.FileInputStream)12 InputStream (java.io.InputStream)12 ImageInputStream (javax.imageio.stream.ImageInputStream)12 MemoryCacheImageInputStream (javax.imageio.stream.MemoryCacheImageInputStream)12 BufferedImage (java.awt.image.BufferedImage)10 ImageReader (javax.imageio.ImageReader)8 CannotGenerateThumbnailException (org.olat.core.commons.services.thumbnail.CannotGenerateThumbnailException)8 FinalSize (org.olat.core.commons.services.thumbnail.FinalSize)7 CMMException (java.awt.color.CMMException)6 ArrayList (java.util.ArrayList)6 VideoMeta (org.olat.modules.video.VideoMeta)5 RandomAccessFile (java.io.RandomAccessFile)4 Date (java.util.Date)4 List (java.util.List)4