Изображение все еще поворачивается после редактирования данных Exif - PullRequest
0 голосов
/ 23 октября 2019

В Моем приложении пользователь захватывает изображение из галереи или камеры, затем оно конвертируется в PDF. Теперь моя проблема в том, что изображения, снятые с устройств Samsung, поворачиваются,

Я пытаюсь отредактировать exifданные, но это не работает,

нет ошибок, изображение остается повернутым

Я новичок в Android, и все данные EXIF ​​идут у меня над головой, некоторые советы будут удивительными

   private void PDFCreation(){
            PdfDocument document=new PdfDocument();
            PdfDocument.PageInfo pageInfo;
            PdfDocument.Page page;
            Canvas canvas;
            int i;
            for (i=0; i < list.size(); i++)  {
                pageInfo=new PdfDocument.PageInfo.Builder(992, 1432, 1).create();
                page=document.startPage(pageInfo);
                canvas=page.getCanvas();
                image=BitmapFactory.decodeFile(list.get(i));
                image=Bitmap.createScaledBitmap(image, 980, 1420, true);
                image.setDensity(DisplayMetrics.DENSITY_300);
                canvas.setDensity(DisplayMetrics.DENSITY_300);

                ExifInterface exif;
                int rotate = 0;

                try
                {
                    exif = new ExifInterface(selectedPhoto);
                    int exifOrientation = exif.getAttributeInt(
                            ExifInterface.TAG_ORIENTATION,
                            ExifInterface.ORIENTATION_NORMAL);

                    switch (exifOrientation)
                    {
                        case ExifInterface.ORIENTATION_ROTATE_90:
                            rotate = 90;

                            break;

                        case ExifInterface.ORIENTATION_ROTATE_180:
                            rotate = 180;
                            break;

                        case ExifInterface.ORIENTATION_ROTATE_270:
                            rotate = 270;
                            break;
                    }


                    if (rotate != 0)
                    {
                        int w = image.getWidth();
                        int h = image.getHeight();

                        // Setting pre rotate
                        Matrix mtx = new Matrix();
                        mtx.preRotate(rotate);

                        // Rotating Bitmap & convert to ARGB_8888, required by tess
                        try
                        {
                            image = Bitmap.createBitmap(image, 0, 0, w, h, mtx, false);
                        }
                        catch(OutOfMemoryError e)
                        {
                            e.printStackTrace();
                            //image = Bitmap.createBitmap(image, 0, 0, w/2, h/2, mtx, false);

                        }

                    }
                }
                catch(Exception ex)
                {
                    ex.printStackTrace();
                }


                Matrix matrix = new Matrix();
                matrix.postRotate(rotate);
                image=createBitmap(image, 0, 0,
                        image.getWidth(), image.getHeight(),
                        matrix, true);

                canvas.drawBitmap(image, 0, 0, null);
                document.finishPage(page);
            }
            @SuppressWarnings("deprecation") String directory_path=Environment.getExternalStorageDirectory().getPath() + "/mypdf/";
            File file=new File(directory_path);
            if (!file.exists()) {
                //noinspection ResultOfMethodCallIgnored
                file.mkdirs();
            }
            @SuppressLint("SimpleDateFormat") String timeStamp=(new SimpleDateFormat("yyyyMMdd_HHmmss")).format(new Date());
            String targetPdf=directory_path + timeStamp + ".pdf";
             filePath=new File(targetPdf);
            try {
                document.writeTo(new FileOutputStream(filePath));
            } catch (IOException e) {
                Log.e("main", "error " + e.toString());
                Toasty.error(this, "Error making PDF" + e.toString(), Toast.LENGTH_LONG).show();
            }
            document.close();


        }
...