Crop manually selected portraits, too

This commit is contained in:
0xb00bface 2021-08-23 15:05:43 +02:00
parent 5538c7c274
commit 56ca4d50de
3 changed files with 22 additions and 21 deletions

View File

@ -46,6 +46,26 @@ public abstract class AbstractPortraitAction {
return output;
}
protected BufferedImage cropImage(BufferedImage img) {
int w = img.getWidth();
int h = img.getHeight();
if (w > h) {
return cropSides(img);
} else {
return cropTopAndBottom(img);
}
}
protected BufferedImage cropSides(BufferedImage img) {
int overlap = img.getWidth() - img.getHeight();
return img.getSubimage(overlap / 2, 0, img.getHeight(), img.getHeight());
}
protected BufferedImage cropTopAndBottom(BufferedImage img) {
int overlap = img.getHeight() - img.getWidth();
return img.getSubimage(0, overlap/2, img.getWidth(), img.getWidth());
}
protected void firePortraitChanged() {
EventBusHolder.BUS.post(new PortraitChangedEvent(model));
}

View File

@ -101,7 +101,8 @@ public class SetPortraitAction extends AbstractPortraitAction {
private boolean processImageFile(String portraitId, String selectedFile) {
try {
BufferedImage original = ImageIO.read(new File(selectedFile));
BufferedImage portrait = convertToScaledJpg(original);
BufferedImage croppedImage = cropImage(original);
BufferedImage portrait = convertToScaledJpg(croppedImage);
boolean success = copyToCacheAsJpg(portraitId, portrait);
if (!success) {
LOG.debug("Available formats: {}", Arrays.toString(ImageIO.getWriterFormatNames()));

View File

@ -45,26 +45,6 @@ public class SetThumbAsPortraitAction extends AbstractPortraitAction {
source.setCursor(Cursor.DEFAULT);
}
private BufferedImage cropImage(BufferedImage img) {
int w = img.getWidth();
int h = img.getHeight();
if (w > h) {
return cropSides(img);
} else {
return cropTopAndBottom(img);
}
}
private BufferedImage cropSides(BufferedImage img) {
int overlap = img.getWidth() - img.getHeight();
return img.getSubimage(overlap / 2, 0, img.getHeight(), img.getHeight());
}
private BufferedImage cropTopAndBottom(BufferedImage img) {
int overlap = img.getHeight() - img.getWidth();
return img.getSubimage(0, overlap/2, img.getWidth(), img.getWidth());
}
private BufferedImage convertFxImageToAwt(Image img) {
return SwingFXUtils.fromFXImage(img, null);
}