Проблемы чтения / записи изображений - PullRequest
0 голосов
/ 12 мая 2019

Я работал над кодом для шифрования и дешифрования изображений через веб-приложение Spring, в котором я использую Thymeleaf.Я проверил каждый метод, участвующий в процессе, и каждый из них является надежным.Предполагается, что процесс будет проходить следующим образом:

Пользователь1 загружает изображение и ключ, приложение разбивает изображение на пиксели, а затем на 128-битные stateHexes, stateHexes шифруются с использованием AES и перестраиваются в зашифрованное изображение для отображенияПользователю1 для скачивания.Затем пользователь 1 отправляет изображение пользователю 2, который затем загружает изображение и расшифровывает его, используя тот же процесс.

Когда я воспринимаю это как вышеописанный сценарий, изображение как-то меняется после сохраненияОднако, если я обращаюсь с этим следующим образом, файл прекрасно шифруется и дешифруется.

Поэтому я предполагаю, что проблема должна заключаться либо в сохранении файла, либо в извлечении файла, либо в какой-то другой проблеме, связанной с обработкой файла.

Ниже я покажу фрагменты кода того, как я загружаю и сохраняю изображения.

Вот так я получаю изображение


          // Get the filename and path for the image passed in from user
      Path fileNameandPath = Paths.get(uploadDirectory, file.getOriginalFilename());

      // Generate the file and write the image onto it
      File imageFile = fileNameandPath.toFile();
      BufferedImage image = null;
      try {
        Files.write(fileNameandPath, file.getBytes());
        image = ImageIO.read(imageFile);
        Files.delete(fileNameandPath);
      } catch (IOException e) {
        e.printStackTrace();
        System.out.println("COULDNT READ IMAGE AT = " + fileNameandPath);
      }

И вот как я создаю outputImage


    String outputFilePath = new File("src/main/resources/static").getAbsolutePath()  + "\\output.jpg";
    File outputFile = new File(outputFilePath);
    try {
      outputFile.createNewFile();
    } catch (IOException e) {
      e.printStackTrace();
      System.out.println("FILE ALREADY EXISTS");
    }

    // Write the image to the outputfile
    try {
      ImageIO.write(outputImage, "jpg", outputFile);
    } catch (IOException e) {
      e.printStackTrace();
    }

Я передаю полностью черное изображение (гекс каждого пикселя)код - 000000), и он читает изображение и шифрует его, как и ожидалось, но при расшифровке он читает предыдущее изображение неправильно, что наводит меня на мысль, что это не код, а скорее всего, как файл сохраняется / восстанавливается?У меня только одно предположение: что-то файл перепутан.Если у кого-то есть какие-либо подсказки относительно того, почему это происходит, любая помощь или указания будут признательны.

Я думаю, что это может иметь отношение к тому, как я пишу изображение.Чтение изображения не проблема, но то, как я пишу изображение, похоже, меняет его.

1 Ответ

0 голосов
/ 12 мая 2019

После того, как я немного поспал, я понял, что из-за того, что мне нужно, чтобы изображение оставалось неизменным при чтении и записи, я терял кусочки изображения из-за характера файлов .jpg с потерями. Теперь, когда я сохраняю свой файл в формате .png, я не получаю ошибок. Надеюсь, это поможет кому-то в будущем!

...