[PYTHON] Convertissez des images numérisées déformées en PDF avec Pillow et PyPDF

introduction

Pour le moment, j'ai emballé les données d'image scannées par l'entreprise avec un zip, et quand je les ai ramenées à la maison et les ai développées, les personnages ont été déformés pour une raison quelconque ... Quelle expérience avez-vous? ** J'ai! (Demi-gile) ** Cependant, comme seul le numéro de série inattendu reste sans être brouillé, il arrive souvent que l'ordre des fichiers puisse être compris. (Exemple æ– ‡ å — 000.jpg, æ– ‡ ås001.jpg) Si vous ne pouvez supprimer que cette partie déformée du nom de fichier et former un beau fichier de numéro de série, cela aura l'air bien et sera utile pour les travaux ultérieurs. Comme il s'agissait d'environ 100 feuilles de données, ce serait un problème de le modifier, j'ai donc décidé de créer un script Python léger. En passant, j'ai essayé de rendre possible la conversion des données d'image en un seul PDF avec une seule touche.

À ce moment-là, j'utilisais ** Pillow ** pour le traitement d'image et ** PyPDF2 ** pour la conversion PDF, donc je voudrais expliquer à ce sujet.

Le script est répertorié sur github. Veuillez vous référer à LISEZ-MOI pour savoir comment utiliser le script.

Introduction de fonctions

Je l'ai écrit à la hâte, donc c'est un script désordonné, mais il comprend les fonctions suivantes

Je vais le présenter brièvement ci-dessous. Veuillez l'ignorer car il s'agit d'un contenu redondant name2number(folderpass, digits, extension) À partir des images dans le chemin du dossier contenant les données d'image reçues en argument (uniquement celles spécifiées par l'extension) Les noms de fichiers sont sérialisés à partir de la partie non déformée (000 dans æ– ‡ å — 000.jpg). Le système d'exploitation est utilisé pour réécrire le nom du fichier et le module re est utilisé pour gérer les expressions régulières. La valeur de retour est un tableau de noms de fichiers pour lesquels le traitement a été ignoré.

changeNameHand(existfiles) La valeur de retour de name2number est un tableau contenant les noms de fichiers couverts par des numéros de série et la réécriture des noms de fichiers ignorés. Lorsque cette fonction le reçoit comme argument, elle écoute de manière interactive le nom du fichier dans l'entrée / sortie standard et le réécrit. Le système d'exploitation est utilisé pour réécrire le nom du fichier et le module re est utilisé pour gérer les expressions régulières. De plus, le module Oreiller (PIL) est utilisé pour l'affichage de l'image pour la confirmation de l'image.

addstr(before, after, digits, extension) Cette fonction attache la chaîne de caractères de l'argument avant le numéro de série et la chaîne de caractères de l'argument après le numéro de série. Je l'utilise lorsque le numéro de série seul n'est pas de bon goût Le système d'exploitation est utilisé pour réécrire le nom du fichier et le module re est utilisé pour gérer les expressions régulières.

image2pdf(filename, digits, extension, removeflug) Utilisez Pillow et PyPDF2 pour combiner les données d'image dans le répertoire actuel en un seul PDF. J'expliquerai en détail plus tard

makeZip(filename, flug) Compressez les données dans le répertoire actuel. J'utilise le module Zipfile.

main() Une fonction pour obtenir des arguments de ligne de commande. J'utilise le module argparse pour obtenir des arguments de ligne de commande.

Convertir des images en PDF avec Pillow et PyPDF

Extrait de script Image2pdf ()

fileName2SerialNumber.py


def image2pdf(filename, digits, extension, removeflug):
    u"""
Fonction pour convertir un fichier image en PDF
    """
    if (extension != ".jpg " and ".png " and ".gif"): #Joue sinon une image
        print("Fichiers image non pris en charge! jpg, png,Onacious avec gif")
        sys.exit(1)
    
    fileWriter = PdfFileWriter()
    files = os.listdir()
    ext = re.compile(extension)
    files.sort()
    count = 1
    removefiles = []
    for file in files:
        num = re.search('\\d{' + str(digits) +'}', file)
        if (num == None):
            pass
        else:
            if (ext.search(file) and num):
                image = PIL.Image.open(file)
                pdfFile = str(file).replace(extension, ".pdf")
                image.save(pdfFile, "PDF", resolution = 100.0)
                with open(pdfFile, "rb") as f:
                    fileReader = PdfFileReader(f, "rb")
                    pageNum = fileReader.getNumPages()
                    for i in range(pageNum):
                        fileWriter.addPage(fileReader.getPage(i))
                        print("%s%Écrire à la page d" % (str(file), count))
                        count += 1
                    removefiles.append(pdfFile)
                    if (removeflug):
                        removefiles.append(file)
                    with open(filename, "wb") as outputs:
                        fileWriter.write(outputs)
    print("-------------------------------------------------------")
    print("Fini l'écriture! nom de fichier%s \n" % filename)
    
    for file in removefiles:
        os.remove(file)
        print("nom de fichier%Supprimé s" % str(file))
    
    print("--------------------------------------------------------")
    print("la fin! Livrables: %s" % filename)
    return None

Travail d'oreiller (PIL)

Pillow est un module de traitement d'image en Python. Vous pouvez entrer avec PIP.

Pour ouvrir un fichier en tant qu'image

python


image = PIL.Image.open(file)

ça ira.

Cette fois, je veux enregistrer l'image au format PDF, je vais donc la réécrire en PDF. Donc

python


image.save(image, "PDF", resolution = 100.0)

Vous pouvez enregistrer l'image au format PDF en faisant. Il est également possible de changer librement la qualité de l 'image en changeant la partie "PDF" en une autre norme d' image ou en réglant la résolution sur autre chose que 100. Il semble qu'il soit nécessaire de réécrire l'extension du fichier image en .pdf avant de lire le fichier image comme point lors de la conversion au format PDF. Donc dans ce script

python


pdfFile = str(file).replace(extension, ".pdf")

L'extension est modifiée comme.

Aussi, bien que non utilisé dans cette fonction, pour afficher une image Après avoir ouvert l'image avec PIL.image.open ()

python


image.show()

Il peut être affiché avec.

Travailler avec PyPDF2

PyPDF2 est un module pratique qui vous permet de combiner plusieurs fichiers PDF en un seul et d'extraire des données texte du PDF. Vous pouvez utiliser PIP.

Tout d'abord, créez une instance pour exporter le fichier.

python


fileWriter = PdfFileWriter()

De plus, l'instance de lecture du fichier PDF est

python


fileReader = PdfFileReader(open(pdffile, "rb"), "rb")

Créez avec. Comme l'ouverture du fichier est impliquée, utilisez avec

python


with open(pdfFile, "rb") as f:
    fileReader = PdfFileReader(f, "rb")

Je pense que c'est moins gênant à faire.

Pour vérifier le nombre total actuel de pages

python


pageNum = fileReader.getNumPages()

Le nombre de pages est entré dans pageNum.

Pour ajouter une page PDF

python


fileWriter.addPage(fileReader.getPage(pageNumber))

ça ira. Renvoie l'objet page avec le numéro de page spécifié par getpage (nombre de pages). La page est ajoutée au nombre spécifié en ajoutantPage avec l'objet de page comme argument.

Lorsque l'édition est terminée, il est finalement exporté sous forme de fichier PDF.

Pour l'export

python


fileWriter.write(open(filename, "wb")

Vous pouvez écrire avec. Puisque la fonction open est utilisée, utilisez l'instruction with

python


with open(filename, "wb") as outputs:
     fileWriter.write(outputs)

Je pense que c'est moins gênant à faire.

en conclusion

Utilisez Pillow et PyPDF2 pour améliorer l'efficacité du travail!

Recommended Posts

Convertissez des images numérisées déformées en PDF avec Pillow et PyPDF
Créez une API pour convertir des fichiers PDF en images TIF avec FastAPI et Docker
Convertir un PDF en image avec ImageMagick
Convertir de PDF en CSV avec pdfplumber
Convertir des fichiers PDF en fichiers PNG avec GIMP
Conversion DICOM en PNG avec ordre croissant et décroissant
Convertir un PDF en image (JPEG / PNG) avec Python
Convertissez des PDF en images en masse avec Python
Convertir 202003 en 2020-03 avec les pandas
Convertissez l'image au format .zip en PDF avec Python
J'ai créé un programme pour convertir des images en art ASCII avec Python et OpenCV
Extraire des images et des tableaux de pdf avec python pour réduire la charge de reporting
Convertir l'espace colorimétrique RVB en CIELAB avec PIL (Pillow)
Convertir des images en sépia avec PIL (Python Imaging Library)
Convertir une vidéo en noir et blanc avec ffmpeg + python + opencv
Activé pour convertir PNG en JPG avec Pillow of Python
Convertir des fichiers écrits en python, etc. en pdf avec la coloration syntaxique
Convertir une image au format PIL lue depuis un formulaire avec Django au format base64
Préparer un environnement pour utiliser OpenCV et Pillow avec AWS Lambda
[Python] Essayez de reconnaître les caractères des images avec OpenCV et pyocr
Convertir .ipynb en .html (avec BatchFile)
Convertir un PDF en documents par OCR
Convertir Markdown en PDF en Python
Convertir un PDF A4 en A3 toutes les 2 pages
Convertir la liste en DataFrame avec python
Convertir des phrases en vecteurs avec gensim
Conversion de pdf en txt 2 [pyocr]
Télécharger et télécharger des images avec Falcon
Convertissez l'image du visage en une qualité d'image élevée avec PULSE afin que vous puissiez voir les pores et la texture
Comment traiter les images de caméra avec Teams et Zoom Volume de l'analyse des émotions avec Tensorflow
J'ai créé un outil CLI pour convertir les images de chaque répertoire en PDF
Recevez des tweets avec la fonction Google Cloud et enregistrez automatiquement les images dans Google Photos
J'ai essayé de convertir la chaîne datetime <-> avec tzinfo en utilisant strftime () et strptime ()
Convertissez la feuille de calcul en CSV et importez-la dans Cloud Storage avec Cloud Functions
J'ai créé un réseau pour convertir des images noir et blanc en images couleur (pix2pix)
Imaginez le fichier pdf et tamponnez toutes les pages avec des tampons (images) confidentiels.
Lisez le fichier CSV avec Python et convertissez-le en DataFrame tel quel
Comment rechercher à l'aide de l'Astroquery de Python et obtenir des images ajustées avec Skyview
Convertir un mémo à la fois avec Python 2to3
Apprenez à coloriser les images monochromes avec Chainer
Capturer des images avec Pupil, python et OpenCV
Convertir des chaînes de caractères en quantités de caractéristiques avec RoBERTa
Convertir des données Excel en JSON avec python
Générez de nombreuses images à un seul caractère avec Pillow (PIL)
Utilisez PIL ou Pillow avec Cygwin Python
Convertissez des données FX 1 minute en données 5 minutes avec Python
Convertir un PDF joint en courrier électronique au format texte
Ajouter des images à des photos iOS avec Pythonista
Convertir un tableau (struct) en json avec golang
Ajouter du bruit gaussien aux images avec python2.7
Convertir des nombres chinois en nombres arabes avec Python
Importer et exporter des images GeoTiff avec Python
Découpez et connectez des images avec ImageMagick
Télécharger des images sur Google Drive avec Python
Exemple de conversion en ondelettes d'images en Python
Convertissez l'historique d'utilisation de Suica mobile au format PDF au format pandas Data Frame avec tabula-py
Comment convertir des pages Web en PDF, PNG, JPG avec VBA (Excel) (Selenium Basic)
Convertissez instantanément le modèle en dictionnaire avec Django et initialisez Form à une vitesse explosive