Publication d'une bibliothèque qui masque les données de caractères dans les images Python

Publié le 2016.04.01 Une bibliothèque qui cache les données de caractères dans les images en utilisant Python. Vous pouvez également l'exécuter à partir de la ligne de commande. Fonctionne avec la série Python2.

install

install


pip install steganography

Exemple d'intégration de données

Untitled.png

Exemple de code

sample-code


# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from steganography.steganography import Steganography

#Incorporer du texte dans l'image
path = "/tmp/image/a.jpg "
output_path = "/tmp/image/b.jpg "
text = 'The quick brown fox jumps over the lazy dog.'
Steganography.encode(path, output_path, text)

#Chargez le texte caché dans l'image
secret_text = Steganography.decode(output_path)

Exemple de commande

python


#Incorporer du texte dans l'image
>>>steganography -e /tmp/image/a.jpg /tmp/image/b.jpg 'The quick brown fox jumps over the lazy dog.'

#Chargez le texte caché dans l'image
>>>steganography -d /tmp/image/b.jpg
The quick brown fox jumps over the lazy dog.

1. Présentation de l'opération - intégration de texte

1-1. normalize Balayez tous les pixels de l'image et sélectionnez les pixels qui ont un reste de 1 lorsque chaque valeur RVB est divisée par 8. Modifiez la couleur du pixel sélectionné pour que le reste ne soit pas 1.

■ Pixels dont la couleur a été modifiée par le traitement de normalisation スクリーンショット 2016-03-31 19.36.12.png

1-2. Masquage de texte

Convertit le texte en hexadécimal. Divisez l'image en 16 pixels et changez la valeur de la couleur de pixel de la partie correspondante de sorte que le reste devienne 1 lorsque chaque valeur RVB est divisée par 8.

2. Vue d'ensemble de l'opération - Lire le texte caché dans l'image

2-1. Lire le texte

Lisez une image avec du texte masqué, divisez l'image en 16 pixels et identifiez les points de pixels où la couleur des pixels est 1 lorsque chaque valeur RVB est divisée par 8. La valeur hexadécimale est acquise à partir de la position du pixel du point, convertie du nombre hexadécimal en chaîne de caractères et sortie.

3. Exemple de code de mise en œuvre à étudier

3-1. Code qui ouvre une image et la lit pixel par pixel

Vous pouvez facilement utiliser l'image en utilisant un oreiller.

open-image


# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from PIL import Image

path = "/tmp/image/a.jpg "
img = Image.open(path)
img = img.convert('RGB')

for y in range(img.size[1]):
    for x in range(img.size[0]):
        r, g, b = img.getpixel((x, y))
        print(r, g, b)

output


>>> python sample.py
(44, 81, 110)
(75, 109, 137)
(85, 114, 144)
(69, 99, 127)
(68, 105, 131)
(52, 94, 116)
(65, 103, 124)
(108, 130, 154)
(149, 150, 181)
(164, 148, 184)
(152, 132, 169)
....

3-2. Code pour changer la couleur des pixels d'une condition spécifique en rouge

red


# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from PIL import Image

path = "/tmp/image/a.jpg "
output_path = "/tmp/image/sample_red.png "
img = Image.open(path)
img = img.convert('RGB')


def matched_pixel(r, g, b):
    return r % 8 == g % 8 == b % 8 == 1


for y in range(img.size[1]):
    for x in range(img.size[0]):
        r, g, b = img.getpixel((x, y))
        if matched_pixel(r, g, b):
            #Réécrire les coordonnées spécifiées en rouge
            img.putpixel((x, y), (255, 0, 0))

img.save(output_path, "PNG", optimize=True)

sample_red.png

3-3. str hex converter

str-hex-converter


# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals


def to_hex(s):
    return s.encode("hex")


def to_str(s):
    return s.decode("hex")


base = "aiueo kakikukeko"
print(to_hex(base))
# >>> 616975656f206b616b696b756b656b6f

assert base == to_str(to_hex(base))

4. Code source

Pilow est utilisé pour lire et écrire des images. Le code source de la bibliothèque est disponible sur github. https://github.com/subc/steganography/blob/master/steganography/steganography.py

Recommended Posts

Publication d'une bibliothèque qui masque les données de caractères dans les images Python
Lecture de code de faker, une bibliothèque qui génère des données de test en Python
Utilisez networkx, une bibliothèque qui gère les graphiques en python (Partie 2: Tutoriel)
À propos de psd-tools, une bibliothèque capable de traiter des fichiers psd en Python
Présentation d'une bibliothèque qui n'était pas incluse dans pip sur Python / Windows
Création de Simple SQLite, une bibliothèque Python qui simplifie la création de table SQLite / l'insertion de données
Un mémo que j'ai écrit un tri rapide en Python
Un programme qui supprime les instructions en double en Python
Analyse de données en Python: une note sur line_profiler
Environnement enregistré pour l'analyse des données avec Python
J'ai enregistré PyQCheck, une bibliothèque qui peut effectuer QuickCheck avec Python, dans PyPI.
J'ai créé un programme en Python qui lit les données FX CSV et crée un grand nombre d'images de graphiques
Créer un bot de collecte de données en Python à l'aide de Selenium
Recevez des données de dictionnaire à partir de programmes Python avec AppleScript
[Python] Comment développer des variables dans une chaîne de caractères
Essayez de rechercher un profil d'un million de caractères en Python
Que contient cette variable (lorsque le script Python est en cours d'exécution)
Création d'une bibliothèque Python DateTimeRange qui gère les plages horaires
En Python, créez un décorateur qui accepte dynamiquement les arguments Créer un décorateur
Jusqu'à ce que vous insériez des données dans une feuille de calcul en Python
Un serveur qui fait écho aux données POSTées avec flask / python
[Python] Une bibliothèque pratique qui convertit les kanji en hiragana
Publier / télécharger une bibliothèque créée en Python vers PyPI
Programme Python qui convertit les données ical en texte
MALSS (introduction), un outil qui prend en charge l'apprentissage automatique en Python
Une note sur l'implémentation de la bibliothèque qui explore les hyperparamètres à l'aide de l'optimisation bayésienne en Python
[Python] Ne laissez que les éléments commençant par une chaîne de caractères spécifique dans le tableau
Un mémo qui lit les données de dashDB avec Python et Spark
Prendre une capture d'écran en Python
Gérer les données ambiantes en Python
Affichez des images DICOM avec Python rudimentaire en tant que professionnel de la santé
Programme Python du "Livre qui enseigne facilement la programmation difficile"
Encodage base64 des images en Python 3
Un programme polyvalent qui formate les chaînes de commande Linux avec python
Créer une fonction en Python
Créer un dictionnaire en Python
Une fonction qui divise l'itérable en N morceaux en Python
[Python] Création d'un outil GUI qui traite automatiquement le CSV des données d'élévation de température dans Excel
Afficher les données UTM-30LX en Python
Boucle sur un générateur qui renvoie un itérateur de date en Python
Créons un script qui s'enregistre avec Ideone.com en Python.
Développer une bibliothèque pour obtenir la liste des collections Kindle en Python
[Python] Programmation pour trouver le nombre de a dans une chaîne de caractères qui se répète un nombre spécifié de fois.
Remplacer les fonctions de bibliothèque en Python
J'ai essayé "un programme qui supprime les déclarations en double en Python"
Créer un bookmarklet en Python
Créez le code qui renvoie "A et prétendant B" en python
[MQTT / Python] Implémentation d'une classe qui fait Pub / Sub de MQTT en Python
Essayez de créer un réseau de neurones en Python sans utiliser de bibliothèque
Dessinez un cœur en Python
Script Python qui stocke 15 ans de données de jeu MLB dans MySQL en 10 minutes (Baseball Hack!)
Programme Python qui agrège l'utilisation du temps à partir des données icalendar
Code de caractère appris en Python
Un ensemble de fichiers de script qui font wordcloud avec Python3
Un script python qui convertit les données Oracle Database en csv
Jouez des sons en Python en supposant que le clavier est un clavier de piano
Une analyse simple des données de Bitcoin fournie par CoinMetrics en Python
Un mémo qui gère les guillemets doubles pleine largeur avec les expressions régulières Python
Facile! Implémenter un bot Twitter qui s'exécute sur Heroku en Python
[Introduction à Python] Comment générer une chaîne de caractères dans une instruction Print