2016-05-23 3 views
1

У меня есть куча фотографий, отсортированных в папке, так что всегда есть одна фотография типа A и одна фотография типа B сразу после этого.Ввод нескольких изображений вместе в один

К сожалению, некоторые из них необходимо было повернуть, и я сделал это, используя стандартный проводник Windows.

Мне нужно, чтобы сочетал каждую пару фотографий A и B с новой фотографией, чтобы первая фотография источника отображалась над вторым. Обе фотографии имеют одинаковую ширину.

Вот код:

File first = ...; 
    File second = ...; 

    BufferedImage A = ImageIO.read(first); 
    BufferedImage B = ImageIO.read(second); 

    int resultHeight = A.getHeight() + B.getHeight(); 
    int resultWidth = A.getWidth(); 
    BufferedImage combined = new BufferedImage(resultWidth, resultHeight, BufferedImage.TYPE_INT_ARGB); 


    Graphics g = combined.getGraphics(); 
    g.drawImage(A, 0, 0, null); 
    g.drawImage(B, 0, A.getHeight(), null); 
    g.dispose(); 

    ImageIO.write(combined, "PNG", new File(destDirectory, destName)); 

К сожалению, несмотря на все фотографии, кажется, имеют одинаковую ориентацию при просмотре с Windows app, они вращаются по-разному в результирующих фотографиях. Я знаю, что есть какой-то флаг, который, кажется, игнорируется BufferedImage.

Как я могу определить этот флаг и в конечном итоге повернуть фотографию по мере необходимости перед объединением? Благодаря!

ответ

1

Предлагаем использовать MetadataExtractor, чтобы получить ориентацию изображения. См. this question.

+0

Если вы извлечете поворот, вы можете использовать [этот ответ] (http://stackoverflow.com/questions/9749121/java-image-rotation-with-affinetransform-outputs-black-image-but-works-well- чтобы вращать изображение. – fhofmann

+0

Спасибо! Я использовал эту библиотеку, и это кажется многообещающим. –

Смежные вопросы