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);
}
}
}
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>");
}
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);
}
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;
}
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();
}
}
}
Aggregations