Frage Sicherstellen, dass Fotos mit der gleichen Ausrichtung gespeichert werden, in der sie aufgenommen wurden?


Aus irgendeinem Grund speichert meine Kamera-App alle Fotos um 90 Grad gedreht (Bilder sehen nur dann richtig aus, wenn sie mit der Kamera im Querformat aufgenommen wurden) Ich glaube, PictureTaken sollte Fotos automatisch drehen, aber ich habe gelesen, dass ein Problem mit Samsung-Geräten besteht um es an einer anderen Marke zu testen, also weiß ich nicht, ob das der Fall ist). Das ist mein Code:

   public void onPictureTaken(byte[] data, Camera camera) {
      // Generate file name
      FileOutputStream outStream = null;
      outStream = new FileOutputStream(filePath);
      outStream.write(data);
      outStream.close();

Ich dachte, es könnte behoben werden, indem man die Ausrichtung und das Drehen des Byte-Arrays überprüft, aber es muss einen einfacheren Weg geben, dies zu tun, da die Handhabung von Byte-Arrays ein Schmerz ist. Wie kann ich sicherstellen, dass Fotos in der Ausrichtung gespeichert werden, in der sie aufgenommen wurden?


8
2018-01-28 06:27


Ursprung


Antworten:


Versuchen Sie etwas wie folgt:

int orientation = Exif.getOrientation(data);
Log.d("#", "onPictureTaken().orientation = " + orientation);
if(orientation != 0) {
     Bitmap bmpSrc = BitmapFactory.decodeByteArray(data, 0, data.length);
     Bitmap bmpRotated = CameraUtil.rotate(bmpSrc, orientation);
     bmpSrc.recycle();


       try {

             FileOutputStream localFileOutputStream = new FileOutputStream(filePath);
             bmpRotated.compress(Bitmap.CompressFormat.JPEG, 90,localFileOutputStream);
             localFileOutputStream.flush();
             localFileOutputStream.close();
             bmpRotated.recycle();

           }
        catch (FileNotFoundException e) 
           {
              e.printStackTrace();
           }
        catch (IOException e) 
           {
               e.printStackTrace();
           }

      } else {

          try {

               FileOutputStream localFileOutputStream = new FileOutputStream(filePath);
               localFileOutputStream.write(data);
               localFileOutputStream.flush();
               localFileOutputStream.close();

               } catch (IOException localIOException)
                  {
                                        Log.e("#",localIOException.getMessage());
                  }
   }

0
2018-01-30 11:44



Es gibt verschiedene Möglichkeiten, um Ihr Bild zu erhalten, als Daten, als Stream, als Datei, auch für Kamera und Galerie und andere Apps. Für jede von ihnen haben Sie eine andere Möglichkeit, auf das Orientierungs-Tag zuzugreifen. Sobald Sie die Ausrichtung haben, können Sie Ihr Bild drehen.

Sie - oder eigentlich alle - sollten wirklich ein Nexus bekommen, sie sind nett und drehen das Bild für Sie und setzen Sie die Orientierung auf 0, während die faulen wie Samsung nur das Bild speichern und das Orientierungs-Tag setzen. ;)


0
2017-09-19 00:31