public AvatarManagerImpl(AvatarStore store, JiraHome jiraHome, ApplicationProperties applicationProperties, GlobalPermissionManager globalPermissionManager, AvatarTagger avatarTagger, AvatarImageDataStorage avatarImageDataStorage, PermissionManager permissionManager, EventPublisher eventPublisher) { this.store = store; this.jiraHome = jiraHome; this.applicationProperties = applicationProperties; this.globalPermissionManager = globalPermissionManager; this.avatarTagger = avatarTagger; this.eventPublisher = eventPublisher; this.scaler = new ImageScaler(); this.avatarImageDataStorage = avatarImageDataStorage; this.permissionManager = permissionManager; }
private RenderedImage cropImage(final BufferedImage image, final Selection croppingSelection, final int pixels) throws IOException { return scaler.getSelectedImageData(image, croppingSelection, pixels); } }
final ImageScaler scaler = new ImageScaler(); RenderedImage image = scaler.getSelectedImageData(ImageIO.read(new FileInputStream(temporaryAvatar.getFile())), temporaryAvatar.getSelection(), size.getPixels()); ImageIO.write(image, AvatarManager.AVATAR_IMAGE_FORMAT_FULL.getName(), out);
/** * Creates an image consisting of the given selection of the source image rescaled to a square with the given size. * If the selection is null, a not-entirely-stupid algorithm for determining a plausible square subselection. * * @param sourceImage the image source to crop and scale from. * @param crop the subrectangle to use, usually square to avoid aspect ratio changes. * @param size the desired size of the edge of the resulting square image. * @return the new image. */ public RenderedImage getSelectedImageData(final BufferedImage sourceImage, Selection crop, final int size) { if (crop == null) { crop = autoCalculateImageCropSelection(sourceImage.getWidth(), sourceImage.getHeight(), size); } CropImageFilter cropFilter = new CropImageFilter(crop.getTopLeftX(), crop.getTopLeftY(), crop.getWidth(), crop.getHeight()); AreaAveragingScaleFilter scaleFilter = new AreaAveragingScaleFilter(size, size); FilteredImageSource croppedImageProducer = new FilteredImageSource(sourceImage.getSource(), cropFilter); FilteredImageSource croppedAndResizedImageProducer = new FilteredImageSource(croppedImageProducer, scaleFilter); ImageGenerator generator = new ImageGenerator(); croppedAndResizedImageProducer.startProduction(generator); BufferedImage scaledImage = generator.getImage(); scaledImage.flush(); return scaledImage; }
File processImage(final Avatar created, final InputStream imageData, final Selection croppingSelection, final ImageSize size) throws IOException { RenderedImage image = scaler.getSelectedImageData(new Thumber().getImage(imageData), croppingSelection, size.getPixels()); File file = createAvatarFile(created, size.getFilenameFlag()); avatarTagger.saveTaggedAvatar(image, AVATAR_IMAGE_FORMAT_FULL.getName(), file); eventPublisher.publish(new JiraHomeChangeEvent(JiraHomeChangeEvent.Action.FILE_ADD, JiraHomeChangeEvent.FileType.AVATAR, file)); return file; }