{"id":8733,"date":"2024-03-09T20:14:13","date_gmt":"2024-03-09T18:14:13","guid":{"rendered":"https:\/\/tangi-bertin.net\/blog\/?p=8733"},"modified":"2024-03-09T20:20:57","modified_gmt":"2024-03-09T18:20:57","slug":"conversion-dimage-avec-python-multiprocessing","status":"publish","type":"post","link":"https:\/\/tangi-bertin.net\/blog\/conversion-dimage-avec-python-multiprocessing-8733\/","title":{"rendered":"Conversion d&rsquo;image avec Python multiprocessing"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Face \u00e0 la n\u00e9cessit\u00e9 de redimensionner et de convertir une multitude d&rsquo;images, un probl\u00e8me r\u00e9current se pose : la plupart des applications ne permettent que le traitement s\u00e9quentiel des fichiers en file d&rsquo;attente. Malgr\u00e9 la puissance de calcul de mon processeur, cette t\u00e2che s&rsquo;annonce fastidieuse. Dans mon cas, pr\u00e8s de 4000 fichiers, chacun d\u00e9passant les 20 Mo, n\u00e9cessitent une transformation. En explorant les possibilit\u00e9s d&rsquo;optimisation, j&rsquo;ai d\u00e9couvert la piste du multiprocessing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un c\u0153ur de processeur est limit\u00e9 \u00e0 ex\u00e9cuter une instruction \u00e0 la fois. Le multiprocessing offre la possibilit\u00e9 de parall\u00e9liser le travail sur diff\u00e9rents c\u0153urs, permettant ainsi \u00e0 chaque c\u0153ur de traiter une image simultan\u00e9ment. A une \u00e9poque o\u00f9 les processeurs peuvent proposer plus de 10 c\u0153urs, le gain de temps devient rapidement cons\u00e9quent.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Python &#8211; Pillow &#8211; Multiprocessing<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Contexte du code ci-dessous : <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>R\u00e9duction de la taille des images \u00e0 une largeur ne d\u00e9passant pas les 3000px &#8211; <em><mark style=\"background-color:#FFCCFF\" class=\"has-inline-color\">resolution=3000<\/mark><\/em><\/li>\n\n\n\n<li>Conversion des images au format TIF une fois redimensionn\u00e9es au format PNG<\/li>\n\n\n\n<li>Traitement parall\u00e9lis\u00e9 de la file d&rsquo;attente sur au maximum 7 c\u0153urs &#8211; <em><mark style=\"background-color:#FFCCFF\" class=\"has-inline-color\">Pool(min(cpu_count(), 7))<\/mark><\/em>.<\/li>\n\n\n\n<li>Par d\u00e9faut il y a une limitation sur la taille maximum des images trait\u00e9es. Les images \u00e9tant de \u00ab\u00a0confiance\u00a0\u00bb pour une ex\u00e9cution locale, j&rsquo;ai supprim\u00e9 la limite en utilisant : <em><mark style=\"background-color:#FFCCFF\" class=\"has-inline-color has-contrast-color\">Image.MAX_IMAGE_PIXELS = None<\/mark><\/em><\/li>\n\n\n\n<li>En bonus : mise en place de la barre de progression de la librairie <a href=\"https:\/\/github.com\/rsalmei\/alive-progress\">alive_progress<\/a> qui permet de suivre l&rsquo;avanc\u00e9e du travail et d&rsquo;avoir une estimation du temps restant jusqu&rsquo;\u00e0 la fin (temps estim\u00e9 sur la base du travail accompli)<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1102\" height=\"356\" src=\"https:\/\/tangi-bertin.net\/blog\/wp-content\/uploads\/2024\/03\/alive-demo.gif\" alt=\"\" class=\"wp-image-8740\" style=\"width:1000px;height:auto\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">C&rsquo;est partie pour le code<\/h2>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;python&quot;,&quot;mime&quot;:&quot;text\/x-python&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Python&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;python&quot;}\">import os\nfrom PIL import Image\nfrom alive_progress import alive_bar\nfrom multiprocessing import Pool, cpu_count\n\nsource_dir = &quot;chemin du r\u00e9pertoire source&quot;\ndestination_dir = &quot;chemin du r\u00e9pertoire destination&quot;\n\ndef process_file(args):\n    root, file, destination_dir, resolution = args\n    try:\n        Image.MAX_IMAGE_PIXELS = None\n\n        \n        source_file_path = os.path.join(root, file)\n        relative_path = os.path.relpath(root, source_dir)\n        destination_path = os.path.join(destination_dir, relative_path)\n        if not os.path.exists(destination_path):\n            os.makedirs(destination_path)\n        \n        filename, file_extension = os.path.splitext(file)\n        destination_file_path = os.path.join(destination_path, f&quot;{filename}.png&quot;)\n        with Image.open(source_file_path) as img:\n            img = img.convert('RGB')\n            img.thumbnail((resolution, resolution))\n            img.save(destination_file_path, dpi=(resolution, resolution))\n            return (&quot;&#x1f449; Copie de &quot; + filename + &quot; \t\u2588 dans \t\u2588 &quot; + destination_path)\n            \n            \n    except Exception as e:\n        print(f&quot;Erreur lors du traitement du fichier {filename}: {e}&quot;)\n\ndef reduire_resolution_et_sauvegarder_en_png(source_dir, destination_dir, resolution):\n    try:\n        \n\n        files_to_process = []\n        for root, dirs, files in os.walk(source_dir):\n            for file in files:\n                if file.lower().endswith('.tif'):\n                    files_to_process.append((root, file))\n\n        with Pool(min(cpu_count(), 7)) as p:\n            args_list = [(root, file, destination_dir, resolution) for root, file in files_to_process]\n            \n            with alive_bar(len(files_to_process), title=&quot;&#x23f3; Traitement des fichiers&quot;) as bar:\n                for _ in p.imap_unordered(process_file, args_list):\n                    \n                    bar()\n                    if _ is not None:\n                       print (_)\n                    \n\n        \n    except Exception as e:\n        print(f&quot;Erreur lors de la copie des fichiers .tif de {source_dir} vers {destination_dir}: {e}&quot;)\n\n\n\nif __name__ == '__main__':\n\n    # Exemple d'utilisation\n\n    reduire_resolution_et_sauvegarder_en_png(source_dir, destination_dir, resolution=3000)<\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Face \u00e0 la n\u00e9cessit\u00e9 de redimensionner et de convertir une multitude d&rsquo;images, un probl\u00e8me r\u00e9current se pose : la plupart des applications ne permettent que le traitement s\u00e9quentiel des fichiers en file d&rsquo;attente. Malgr\u00e9 la puissance de calcul de mon processeur, cette t\u00e2che s&rsquo;annonce fastidieuse. Dans mon cas, pr\u00e8s de 4000 fichiers, chacun d\u00e9passant les [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":8738,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[558],"tags":[],"class_list":["post-8733","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Conversion d&#039;image avec Python multiprocessing - TIC-logs par Tangi<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/tangi-bertin.net\/blog\/conversion-dimage-avec-python-multiprocessing-8733\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Conversion d&#039;image avec Python multiprocessing - TIC-logs par Tangi\" \/>\n<meta property=\"og:description\" content=\"Face \u00e0 la n\u00e9cessit\u00e9 de redimensionner et de convertir une multitude d&rsquo;images, un probl\u00e8me r\u00e9current se pose : la plupart des applications ne permettent que le traitement s\u00e9quentiel des fichiers en file d&rsquo;attente. Malgr\u00e9 la puissance de calcul de mon processeur, cette t\u00e2che s&rsquo;annonce fastidieuse. Dans mon cas, pr\u00e8s de 4000 fichiers, chacun d\u00e9passant les [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tangi-bertin.net\/blog\/conversion-dimage-avec-python-multiprocessing-8733\/\" \/>\n<meta property=\"og:site_name\" content=\"TIC-logs par Tangi\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-09T18:14:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-09T18:20:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/tangi-bertin.net\/blog\/wp-content\/uploads\/2024\/03\/joshua-reddekopp-GkFQEOubrCo-unsplash-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1707\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Tangi Bertin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tangi Bertin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/conversion-dimage-avec-python-multiprocessing-8733\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/conversion-dimage-avec-python-multiprocessing-8733\\\/\"},\"author\":{\"name\":\"Tangi Bertin\",\"@id\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/#\\\/schema\\\/person\\\/6e125a432b08117702a7b2a04f50fb89\"},\"headline\":\"Conversion d&rsquo;image avec Python multiprocessing\",\"datePublished\":\"2024-03-09T18:14:13+00:00\",\"dateModified\":\"2024-03-09T18:20:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/conversion-dimage-avec-python-multiprocessing-8733\\\/\"},\"wordCount\":291,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/conversion-dimage-avec-python-multiprocessing-8733\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/joshua-reddekopp-GkFQEOubrCo-unsplash-scaled.jpg\",\"articleSection\":[\"Code\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/conversion-dimage-avec-python-multiprocessing-8733\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/conversion-dimage-avec-python-multiprocessing-8733\\\/\",\"url\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/conversion-dimage-avec-python-multiprocessing-8733\\\/\",\"name\":\"Conversion d'image avec Python multiprocessing - TIC-logs par Tangi\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/conversion-dimage-avec-python-multiprocessing-8733\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/conversion-dimage-avec-python-multiprocessing-8733\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/joshua-reddekopp-GkFQEOubrCo-unsplash-scaled.jpg\",\"datePublished\":\"2024-03-09T18:14:13+00:00\",\"dateModified\":\"2024-03-09T18:20:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/conversion-dimage-avec-python-multiprocessing-8733\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/conversion-dimage-avec-python-multiprocessing-8733\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/conversion-dimage-avec-python-multiprocessing-8733\\\/#primaryimage\",\"url\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/joshua-reddekopp-GkFQEOubrCo-unsplash-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/joshua-reddekopp-GkFQEOubrCo-unsplash-scaled.jpg\",\"width\":2560,\"height\":1707},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/conversion-dimage-avec-python-multiprocessing-8733\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Conversion d&rsquo;image avec Python multiprocessing\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/\",\"name\":\"TIC-logs par Tangi\",\"description\":\"Un mouton \u00e0 5 pattes dans le vert paturage du web\",\"publisher\":{\"@id\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/#organization\",\"name\":\"TIC-logs par Tangi\",\"url\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/wp-content\\\/uploads\\\/2013\\\/08\\\/logo.png\",\"contentUrl\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/wp-content\\\/uploads\\\/2013\\\/08\\\/logo.png\",\"width\":170,\"height\":45,\"caption\":\"TIC-logs par Tangi\"},\"image\":{\"@id\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/#\\\/schema\\\/person\\\/6e125a432b08117702a7b2a04f50fb89\",\"name\":\"Tangi Bertin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2720ed536308e71f11012cb6909df5571def3effb19460e279781e0b599428f0?s=96&d=wavatar&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2720ed536308e71f11012cb6909df5571def3effb19460e279781e0b599428f0?s=96&d=wavatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2720ed536308e71f11012cb6909df5571def3effb19460e279781e0b599428f0?s=96&d=wavatar&r=g\",\"caption\":\"Tangi Bertin\"},\"sameAs\":[\"http:\\\/\\\/tangi-bertin.net\"],\"url\":\"https:\\\/\\\/tangi-bertin.net\\\/blog\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Conversion d'image avec Python multiprocessing - TIC-logs par Tangi","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/tangi-bertin.net\/blog\/conversion-dimage-avec-python-multiprocessing-8733\/","og_locale":"fr_FR","og_type":"article","og_title":"Conversion d'image avec Python multiprocessing - TIC-logs par Tangi","og_description":"Face \u00e0 la n\u00e9cessit\u00e9 de redimensionner et de convertir une multitude d&rsquo;images, un probl\u00e8me r\u00e9current se pose : la plupart des applications ne permettent que le traitement s\u00e9quentiel des fichiers en file d&rsquo;attente. Malgr\u00e9 la puissance de calcul de mon processeur, cette t\u00e2che s&rsquo;annonce fastidieuse. Dans mon cas, pr\u00e8s de 4000 fichiers, chacun d\u00e9passant les [&hellip;]","og_url":"https:\/\/tangi-bertin.net\/blog\/conversion-dimage-avec-python-multiprocessing-8733\/","og_site_name":"TIC-logs par Tangi","article_published_time":"2024-03-09T18:14:13+00:00","article_modified_time":"2024-03-09T18:20:57+00:00","og_image":[{"width":2560,"height":1707,"url":"https:\/\/tangi-bertin.net\/blog\/wp-content\/uploads\/2024\/03\/joshua-reddekopp-GkFQEOubrCo-unsplash-scaled.jpg","type":"image\/jpeg"}],"author":"Tangi Bertin","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Tangi Bertin","Dur\u00e9e de lecture estim\u00e9e":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/tangi-bertin.net\/blog\/conversion-dimage-avec-python-multiprocessing-8733\/#article","isPartOf":{"@id":"https:\/\/tangi-bertin.net\/blog\/conversion-dimage-avec-python-multiprocessing-8733\/"},"author":{"name":"Tangi Bertin","@id":"https:\/\/tangi-bertin.net\/blog\/#\/schema\/person\/6e125a432b08117702a7b2a04f50fb89"},"headline":"Conversion d&rsquo;image avec Python multiprocessing","datePublished":"2024-03-09T18:14:13+00:00","dateModified":"2024-03-09T18:20:57+00:00","mainEntityOfPage":{"@id":"https:\/\/tangi-bertin.net\/blog\/conversion-dimage-avec-python-multiprocessing-8733\/"},"wordCount":291,"commentCount":0,"publisher":{"@id":"https:\/\/tangi-bertin.net\/blog\/#organization"},"image":{"@id":"https:\/\/tangi-bertin.net\/blog\/conversion-dimage-avec-python-multiprocessing-8733\/#primaryimage"},"thumbnailUrl":"https:\/\/tangi-bertin.net\/blog\/wp-content\/uploads\/2024\/03\/joshua-reddekopp-GkFQEOubrCo-unsplash-scaled.jpg","articleSection":["Code"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/tangi-bertin.net\/blog\/conversion-dimage-avec-python-multiprocessing-8733\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/tangi-bertin.net\/blog\/conversion-dimage-avec-python-multiprocessing-8733\/","url":"https:\/\/tangi-bertin.net\/blog\/conversion-dimage-avec-python-multiprocessing-8733\/","name":"Conversion d'image avec Python multiprocessing - TIC-logs par Tangi","isPartOf":{"@id":"https:\/\/tangi-bertin.net\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/tangi-bertin.net\/blog\/conversion-dimage-avec-python-multiprocessing-8733\/#primaryimage"},"image":{"@id":"https:\/\/tangi-bertin.net\/blog\/conversion-dimage-avec-python-multiprocessing-8733\/#primaryimage"},"thumbnailUrl":"https:\/\/tangi-bertin.net\/blog\/wp-content\/uploads\/2024\/03\/joshua-reddekopp-GkFQEOubrCo-unsplash-scaled.jpg","datePublished":"2024-03-09T18:14:13+00:00","dateModified":"2024-03-09T18:20:57+00:00","breadcrumb":{"@id":"https:\/\/tangi-bertin.net\/blog\/conversion-dimage-avec-python-multiprocessing-8733\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tangi-bertin.net\/blog\/conversion-dimage-avec-python-multiprocessing-8733\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/tangi-bertin.net\/blog\/conversion-dimage-avec-python-multiprocessing-8733\/#primaryimage","url":"https:\/\/tangi-bertin.net\/blog\/wp-content\/uploads\/2024\/03\/joshua-reddekopp-GkFQEOubrCo-unsplash-scaled.jpg","contentUrl":"https:\/\/tangi-bertin.net\/blog\/wp-content\/uploads\/2024\/03\/joshua-reddekopp-GkFQEOubrCo-unsplash-scaled.jpg","width":2560,"height":1707},{"@type":"BreadcrumbList","@id":"https:\/\/tangi-bertin.net\/blog\/conversion-dimage-avec-python-multiprocessing-8733\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/tangi-bertin.net\/blog\/"},{"@type":"ListItem","position":2,"name":"Conversion d&rsquo;image avec Python multiprocessing"}]},{"@type":"WebSite","@id":"https:\/\/tangi-bertin.net\/blog\/#website","url":"https:\/\/tangi-bertin.net\/blog\/","name":"TIC-logs par Tangi","description":"Un mouton \u00e0 5 pattes dans le vert paturage du web","publisher":{"@id":"https:\/\/tangi-bertin.net\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/tangi-bertin.net\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/tangi-bertin.net\/blog\/#organization","name":"TIC-logs par Tangi","url":"https:\/\/tangi-bertin.net\/blog\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/tangi-bertin.net\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/tangi-bertin.net\/blog\/wp-content\/uploads\/2013\/08\/logo.png","contentUrl":"https:\/\/tangi-bertin.net\/blog\/wp-content\/uploads\/2013\/08\/logo.png","width":170,"height":45,"caption":"TIC-logs par Tangi"},"image":{"@id":"https:\/\/tangi-bertin.net\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/tangi-bertin.net\/blog\/#\/schema\/person\/6e125a432b08117702a7b2a04f50fb89","name":"Tangi Bertin","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/2720ed536308e71f11012cb6909df5571def3effb19460e279781e0b599428f0?s=96&d=wavatar&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2720ed536308e71f11012cb6909df5571def3effb19460e279781e0b599428f0?s=96&d=wavatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2720ed536308e71f11012cb6909df5571def3effb19460e279781e0b599428f0?s=96&d=wavatar&r=g","caption":"Tangi Bertin"},"sameAs":["http:\/\/tangi-bertin.net"],"url":"https:\/\/tangi-bertin.net\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/tangi-bertin.net\/blog\/wp-json\/wp\/v2\/posts\/8733","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tangi-bertin.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tangi-bertin.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tangi-bertin.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tangi-bertin.net\/blog\/wp-json\/wp\/v2\/comments?post=8733"}],"version-history":[{"count":6,"href":"https:\/\/tangi-bertin.net\/blog\/wp-json\/wp\/v2\/posts\/8733\/revisions"}],"predecessor-version":[{"id":8742,"href":"https:\/\/tangi-bertin.net\/blog\/wp-json\/wp\/v2\/posts\/8733\/revisions\/8742"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tangi-bertin.net\/blog\/wp-json\/wp\/v2\/media\/8738"}],"wp:attachment":[{"href":"https:\/\/tangi-bertin.net\/blog\/wp-json\/wp\/v2\/media?parent=8733"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tangi-bertin.net\/blog\/wp-json\/wp\/v2\/categories?post=8733"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tangi-bertin.net\/blog\/wp-json\/wp\/v2\/tags?post=8733"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}