2017-02-10 4 views
0

Я разрабатываю приложение, которое скрывает текст, используя метод стеганографии под названием LSB, помещая его в изображение. Но во время тестирования я обнаружил, что когда вы сохраняете изображение в галерее, а затем загружаете его оттуда, это значения RGB имеют изменения. Это красные значения:Swift 3 - Сохранение смены изображения Значения RGB

34 -> 41 
29 -> 34 
44 -> 46 
63 -> 62 
101 -> 105 
118 -> 119 

Слева - какие они были, право - чем они становятся. Конечно, такое изменение полностью разрушает текст, скрытый внутри. Это код, я использую, чтобы сохранить изображение:

UIImageWriteToSavedPhotosAlbum(newImg, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil) 


func image(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) { 
     if let error = error { 
      let ac = UIAlertController(title: "Saving error", message: error.localizedDescription, preferredStyle: .alert) 
      ac.addAction(UIAlertAction(title: "OK", style: .default)) 
      present(ac, animated: true) 
     } else { 
      let ac = UIAlertController(title: "Saved!", message: "Saved to the gallery", preferredStyle: .alert) 
      ac.addAction(UIAlertAction(title: "OK", style: .default)) 
      present(ac, animated: true) 
     } 
    } 

И это путь я извлечения значения RGB:

func pixelData(image: UIImage) -> [UInt8]? { 
    let size = image.size 
    let dataSize = size.width * size.height * 4 
    var pixelData = [UInt8](repeating: 0, count: Int(dataSize)) 
    let colorSpace = CGColorSpaceCreateDeviceRGB() 
    let context = CGContext(data: &pixelData,width: Int(size.width), height: Int(size.height), bitsPerComponent: 8, bytesPerRow: 4 * Int(size.width), space: colorSpace, bitmapInfo: CGImageAlphaInfo.noneSkipLast.rawValue) 
    guard let cgImage = image.cgImage else { return nil } 
    context?.draw(cgImage, in: CGRect(x: 0, y: 0, width: size.width, height: size.height)) 

    return pixelData 
} 

Мне нужен способ, чтобы сохранить изображение точно так, как является. Любая помощь?

Edit 1. Текст изображения литьевого FUNC:

func encrypt(image: UIImage, message: String) -> UIImage { 

     var text = message 
     text += endSymbols //Need to decrypt message 


     var RGBArray = pixelData(image: image)! 
     let binaryMessage = toBinary(string: text) //Convert characters to binary ASCII number 
     var counter: Int = 0 

     for letter in binaryMessage { 
      for char in letter.characters { 

       let num = RGBArray[counter] 
       let characterBit = char 
       let bitValue = UInt8(String(characterBit)) 
       let resultNum = (num & 0b11111110) | bitValue! 
       RGBArray[counter] = resultNum 
       counter += 4 //Modify only RED values bits 
      } 
     } 

     let resultImg = toImage(data: RGBArray, width: Int(image.size.width), height: Int(image.size.height)) 
     return resultImg! 
    } 
+0

Когда вы сохраняете изображение, оно находится в формате JPEG? – Reti43

+0

Да, я тестировал его на моих .jpg фотографиях и на изображениях по умолчанию Apple из галереи на Simulator – askrav

+1

Вы не можете использовать jpg-фотографии с заменой LSB, потому что формат изображения является потерянным (пиксели могут быть изменены во время хранения для достижения сжатия). Вместо этого используйте bmp, png или любой другой формат без потерь. – Reti43

ответ

-1

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

 let imageData = UIImagePNGRepresentation(encryptedImg) 
     encryptedImg = UIImage(data: imageData!)! 

Может быть, это явный спецификатор сохранения в .PNG.

В любом случае проблема решена.

0

Вам необходимо сохранить в несжатом формате. Я не знаю, как программировать в быстром. Я решил те же вопросы в Objective-c, используя ALAssetsLibrary.

+0

Это бесполезный ответ, больше подходит для комментариев. Необходимость сохранения в несжатом формате уже упоминалась в комментариях. – Reti43

+0

Спасибо за ваше предложение. Я новичок и практикую, чтобы ответить на вопрос. В следующий раз я буду осторожен. – killerray

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