Pull request #150: cleaned up image code
Merge in RED/redaction-service from image-cleanup to master * commit '1ddcafbdd23adb8354259660e25723449fb47855': cleaned up image code
This commit is contained in:
commit
f7af37d287
@ -149,14 +149,14 @@ public class PdfSegmentationService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//merge images, if they are separated during pdf import, return new list of Pdfimages
|
//merge images, if they are separated during pdf import, return new list of Pdfimages
|
||||||
private List<PdfImage> processImages(List<PdfImage> imageList){
|
private List<PdfImage> processImages(List<PdfImage> imageList) {
|
||||||
if (imageList.size() >1) {
|
if (imageList.size() > 1) {
|
||||||
List<PdfImage> mergedList = new ArrayList<>();
|
List<PdfImage> mergedList = new ArrayList<>();
|
||||||
int countElementsInList = 0;
|
int countElementsInList = 0;
|
||||||
boolean beginImage = true;
|
boolean beginImage = true;
|
||||||
|
|
||||||
// a List of Boolean, true = candidate for merging, false = no merging
|
// a List of Boolean, true = candidate for merging, false = no merging
|
||||||
ArrayList<Boolean> candidatesList = getCandidatesList(imageList);
|
List<Boolean> candidatesList = getCandidatesList(imageList);
|
||||||
|
|
||||||
// loop through list, if there are candidates for merging (true), merge images and add it to mergedList
|
// loop through list, if there are candidates for merging (true), merge images and add it to mergedList
|
||||||
for (int i = 0; i < candidatesList.size(); i++) {
|
for (int i = 0; i < candidatesList.size(); i++) {
|
||||||
@ -164,29 +164,35 @@ public class PdfSegmentationService {
|
|||||||
if (beginImage) {
|
if (beginImage) {
|
||||||
//begin of image, merge two parts of imageList
|
//begin of image, merge two parts of imageList
|
||||||
PdfImage mergedImage = mergeTwoImages(imageList.get(i), imageList.get(i + 1));
|
PdfImage mergedImage = mergeTwoImages(imageList.get(i), imageList.get(i + 1));
|
||||||
mergedList.add(mergedImage);
|
// image merge successful
|
||||||
countElementsInList++;
|
if (mergedImage != null) {
|
||||||
|
mergedList.add(mergedImage);
|
||||||
|
countElementsInList++;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
//middle of an image, merge current piece auf mergedList with image of imageList
|
//middle of an image, merge current piece auf mergedList with image of imageList
|
||||||
PdfImage mergedImage = mergeTwoImages(mergedList.get(countElementsInList - 1), imageList.get(i + 1));
|
PdfImage mergedImage = mergeTwoImages(mergedList.get(countElementsInList - 1), imageList.get(i + 1));
|
||||||
mergedList.set(countElementsInList - 1, mergedImage);
|
// image merge successful
|
||||||
|
if (mergedImage != null) {
|
||||||
|
mergedList.set(countElementsInList - 1, mergedImage);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
beginImage = false;
|
beginImage = false;
|
||||||
} else {
|
} else {
|
||||||
// if the last candidate is false, then both images i and i+1 must be added
|
// if the last candidate is false, then both images i and i+1 must be added
|
||||||
if (i == candidatesList.size()-1){
|
if (i == candidatesList.size() - 1) {
|
||||||
if (countElementsInList> 0 && mergedList.get(countElementsInList-1) == imageList.get(i)){
|
if (countElementsInList > 0 && mergedList.get(countElementsInList - 1) == imageList.get(i)) {
|
||||||
mergedList.add(imageList.get(i+1));
|
mergedList.add(imageList.get(i + 1));
|
||||||
}else {
|
} else {
|
||||||
mergedList.add(imageList.get(i));
|
mergedList.add(imageList.get(i));
|
||||||
mergedList.add(imageList.get(i + 1));
|
mergedList.add(imageList.get(i + 1));
|
||||||
}
|
}
|
||||||
}else {
|
} else {
|
||||||
//first image is not splitted, add i to resultlist
|
//first image is not splitted, add i to resultlist
|
||||||
if (beginImage){
|
if (beginImage) {
|
||||||
mergedList.add(imageList.get(i));
|
mergedList.add(imageList.get(i));
|
||||||
countElementsInList++;
|
countElementsInList++;
|
||||||
}else {
|
} else {
|
||||||
// i is the end of an image, add begin of new image
|
// i is the end of an image, add begin of new image
|
||||||
mergedList.add(imageList.get(i + 1));
|
mergedList.add(imageList.get(i + 1));
|
||||||
countElementsInList++;
|
countElementsInList++;
|
||||||
@ -194,14 +200,15 @@ public class PdfSegmentationService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}return mergedList;
|
}
|
||||||
}else {
|
return mergedList;
|
||||||
|
} else {
|
||||||
return imageList;
|
return imageList;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private PdfImage mergeTwoImages(PdfImage image1, PdfImage image2){
|
private PdfImage mergeTwoImages(PdfImage image1, PdfImage image2) {
|
||||||
PdfImage newPdfImage = null;
|
|
||||||
// diese Angaben von getPosition scheinen nicht richtig zu sein, damit werden teile des Bildes abgeschnitten
|
// diese Angaben von getPosition scheinen nicht richtig zu sein, damit werden teile des Bildes abgeschnitten
|
||||||
double width = image1.getPosition().getWidth();
|
double width = image1.getPosition().getWidth();
|
||||||
double height1 = image1.getPosition().getHeight();
|
double height1 = image1.getPosition().getHeight();
|
||||||
@ -211,39 +218,48 @@ public class PdfSegmentationService {
|
|||||||
double img1width = image1.getImage().getWidth();
|
double img1width = image1.getImage().getWidth();
|
||||||
double img2height = image2.getImage().getHeight();
|
double img2height = image2.getImage().getHeight();
|
||||||
|
|
||||||
BufferedImage mergedImage = new BufferedImage((int) img1width, (int) (img1height+ img2height), BufferedImage.TYPE_INT_RGB);
|
BufferedImage mergedImage = new BufferedImage((int) img1width, (int) (img1height + img2height), BufferedImage.TYPE_INT_RGB);
|
||||||
Graphics g = mergedImage.getGraphics();
|
Graphics mergedImageGraphics = mergedImage.getGraphics();
|
||||||
try {
|
try {
|
||||||
g.drawImage(image1.getImage(),0,0,null);
|
mergedImageGraphics.drawImage(image1.getImage(), 0, 0, null);
|
||||||
g.drawImage(image2.getImage(),0, (int) (img1height),null);
|
mergedImageGraphics.drawImage(image2.getImage(), 0, (int) (img1height), null);
|
||||||
|
|
||||||
// set Image, Position and type for merged Image
|
// set Image, Position and type for merged Image
|
||||||
//set position for merged image with values of image1 and the height of both
|
//set position for merged image with values of image1 and the height of both
|
||||||
Rectangle2D pos = new Rectangle2D.Float();
|
Rectangle2D pos = new Rectangle2D.Float();
|
||||||
pos.setRect(image1.getPosition().getX(), image2.getPosition().getY(), width,height1+height2);
|
pos.setRect(image1.getPosition().getX(), image2.getPosition().getY(), width, height1 + height2);
|
||||||
newPdfImage = new PdfImage(mergedImage,pos,0);
|
PdfImage newPdfImage = new PdfImage(mergedImage, pos, image1.getPage());
|
||||||
// Graphics need to be disposed
|
// Graphics need to be disposed
|
||||||
newPdfImage.getImage().flush();
|
|
||||||
newPdfImage.getImage().getGraphics().dispose();
|
image1.getImage().flush();
|
||||||
|
image2.getImage().flush();
|
||||||
|
|
||||||
|
mergedImage.flush();
|
||||||
|
mergedImageGraphics.dispose();
|
||||||
|
|
||||||
|
return newPdfImage;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
// failed to merge image
|
||||||
|
log.error("Failed to merge image", e);
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
newPdfImage.setPage(image1.getPage());
|
|
||||||
return newPdfImage;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//make a list of true and false, if the image is a candidate for merging
|
//make a list of true and false, if the image is a candidate for merging
|
||||||
private ArrayList<Boolean> getCandidatesList(List<PdfImage> imageList) {
|
private List<Boolean> getCandidatesList(List<PdfImage> imageList) {
|
||||||
ArrayList<Boolean> candidatesList = new ArrayList<>();
|
List<Boolean> candidatesList = new ArrayList<>();
|
||||||
for (int i = 0; i < imageList.size(); i++) {
|
for (int i = 0; i < imageList.size(); i++) {
|
||||||
if (i >= 1) {
|
if (i >= 1) {
|
||||||
candidatesList.add(isCandidateForMerging(imageList.get(i - 1), imageList.get(i)));
|
candidatesList.add(isCandidateForMerging(imageList.get(i - 1), imageList.get(i)));
|
||||||
}
|
}
|
||||||
}return candidatesList;
|
}
|
||||||
|
return candidatesList;
|
||||||
}
|
}
|
||||||
|
|
||||||
// evaluate if two images are candidates for merging, depending on their coordinates, width and height
|
// evaluate if two images are candidates for merging, depending on their coordinates, width and height
|
||||||
private boolean isCandidateForMerging(PdfImage image1, PdfImage image2){
|
private boolean isCandidateForMerging(PdfImage image1, PdfImage image2) {
|
||||||
double x1 = image1.getPosition().getX();
|
double x1 = image1.getPosition().getX();
|
||||||
double y1 = image1.getPosition().getY();
|
double y1 = image1.getPosition().getY();
|
||||||
double width1 = image1.getPosition().getWidth();
|
double width1 = image1.getPosition().getWidth();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user