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