Search in sources :

Example 66 with Size

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

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 67 with Size

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

the class ImageRenderer method renderMovie.

private void renderMovie(StringOutput sb, ImageComponent ic) {
    // Use configured calculated scaled size, fallback to default size
    int width = 320;
    int height = 240;
    Size size = ic.getScaledSize();
    if (size != null) {
        width = size.getWidth();
        // +20 because of toolbar
        height = size.getHeight() + 20;
    }
    // Add video name with mime type ending for better browser support
    String mapperUrl = ic.getMapperUrl();
    String name = ic.getMedia().getName();
    if (name.lastIndexOf('.') > 0) {
        mapperUrl += "/" + name;
    } else {
        mapperUrl += "/video." + ic.getSuffix(ic.getMimeType());
    }
    // Add poster image if available
    String poster = null;
    if (ic.getPoster() != null) {
        poster = ic.getPosterMapperUrl() + "/" + ic.getPoster().getName();
    }
    // Provide own component dispatch ID and wrap in div
    String compId = "o_c" + ic.getDispatchID();
    // START component
    sb.append("<div id='").append(compId).append("' class='o_video'>");
    // The inner component
    String imgId = "mov_" + ic.getDispatchID();
    sb.append("<div id='").append(imgId).append("' name='").append(imgId).append("' style='width:").append(width).append("px; height:").append(height).append("px;' class='o_video_wrapper'></div>").append("<script type='text/javascript'>").append("/* <![CDATA[ */").append("BPlayer.insertPlayer('").append(Settings.createServerURI()).append(mapperUrl);
    sb.append("','").append(imgId).append("',").append(width).append(",").append(height).append(",'video'");
    if (poster != null) {
        sb.append(",null,null,null,null,null,null,'").append(poster).append("'");
    }
    sb.append(");").append("/* ]]> */").append("</script>").append(// ENDcomponent
    "</div>");
}
Also used : Size(org.olat.core.commons.services.image.Size)

Example 68 with Size

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

the class ImageRenderer method renderImage.

private void renderImage(StringOutput sb, ImageComponent ic) {
    // Provide own component dispatch ID and wrap in div
    String compId = "o_c" + ic.getDispatchID();
    Size scaledSize = ic.getScaledSize();
    boolean cropEnabled = ic.isCropSelectionEnabled();
    if (cropEnabled) {
        // wrapper for cropper.js
        sb.append("<div style='");
        if (scaledSize != null) {
            sb.append("width:").append(scaledSize.getWidth()).append("px;");
            sb.append("height:").append(scaledSize.getHeight()).append("px;");
        }
        sb.append("'>");
    }
    boolean divWrapper = ic.isDivImageWrapper();
    if (divWrapper) {
        // START component
        sb.append("<div id='").append(compId).append("' class='o_image'>");
    }
    // The inner component
    String imgId = divWrapper ? "o_img" + ic.getDispatchID() : compId;
    sb.append("<img").append(" id='").append(imgId).append("'");
    if (scaledSize != null) {
        sb.append(" width=\"").append(scaledSize.getWidth()).append("\"");
        sb.append(" height=\"").append(scaledSize.getHeight()).append("\"");
    }
    String mapperUrl = ic.getMapperUrl();
    String name = ic.getMedia().getName();
    if (name.lastIndexOf('.') > 0) {
        mapperUrl += "/" + name + "?" + System.nanoTime();
    } else {
        mapperUrl += "/?" + System.nanoTime();
    }
    sb.append(" src='").append(mapperUrl).append("' alt=\"");
    if (StringHelper.containsNonWhitespace(ic.getAlt())) {
        sb.append(ic.getAlt());
    } else {
        sb.append("*");
    }
    sb.append("\" />");
    if (cropEnabled) {
        sb.append("<input id='").append(imgId).append("_x' name='").append(imgId).append("_x' type='hidden' value='' />").append("<input id='").append(imgId).append("_y' name='").append(imgId).append("_y' type='hidden' value='' />").append("<input id='").append(imgId).append("_w' name='").append(imgId).append("_w' type='hidden' value='' />").append("<input id='").append(imgId).append("_h' name='").append(imgId).append("_h' type='hidden' value='' />");
        sb.append("<script type='text/javascript'>\n").append("/* <![CDATA[ */ \n").append("jQuery(function() {\n").append("  jQuery('#").append(imgId).append("').cropper({\n").append("    aspectRatio:1,\n").append("    done: function(crop) {\n").append("      jQuery('input#").append(imgId).append("_x').val(crop.x1);\n").append("    	 jQuery('input#").append(imgId).append("_y').val(crop.y1);\n").append("    	 jQuery('input#").append(imgId).append("_w').val(crop.width);\n").append("    	 jQuery('input#").append(imgId).append("_h').val(crop.height);\n").append("    }").append("  });").append("});").append("/* ]]> */\n").append("</script>");
    }
    // ENDcomponent
    sb.append("</div>", divWrapper);
    sb.append("</div>", cropEnabled);
}
Also used : Size(org.olat.core.commons.services.image.Size)

Example 69 with Size

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

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 70 with Size

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

the class AbstractImageHelper method getImageSizeFallback.

private Size getImageSizeFallback(VFSLeaf media) {
    InputStream fileStream = null;
    BufferedImage imageSrc = null;
    try {
        fileStream = media.getInputStream();
        if (fileStream != null) {
            imageSrc = ImageIO.read(fileStream);
            if (imageSrc == null) {
                // happens with faulty Java implementation, e.g. on MacOSX
                return null;
            }
            double realWidth = imageSrc.getWidth();
            double realHeight = imageSrc.getHeight();
            return new Size((int) realWidth, (int) realHeight, 0, 0, false);
        } else {
            return null;
        }
    } catch (IOException e) {
        // log error, don't do anything else
        log.error("Problem while setting image size to fit for resource::" + media, e);
        return null;
    } finally {
        IOUtils.closeQuietly(fileStream);
        if (imageSrc != null) {
            imageSrc.flush();
        }
    }
}
Also used : FileInputStream(java.io.FileInputStream) ImageInputStream(javax.imageio.stream.ImageInputStream) MemoryCacheImageInputStream(javax.imageio.stream.MemoryCacheImageInputStream) InputStream(java.io.InputStream) Size(org.olat.core.commons.services.image.Size) IOException(java.io.IOException) BufferedImage(java.awt.image.BufferedImage)

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