<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://kono.phpage.fr/index.php?action=history&amp;feed=atom&amp;title=Compresse_et_dimensionne_image_%28Python%29</id>
	<title>Compresse et dimensionne image (Python) - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://kono.phpage.fr/index.php?action=history&amp;feed=atom&amp;title=Compresse_et_dimensionne_image_%28Python%29"/>
	<link rel="alternate" type="text/html" href="https://kono.phpage.fr/index.php?title=Compresse_et_dimensionne_image_(Python)&amp;action=history"/>
	<updated>2026-10-24T16:43:52Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://kono.phpage.fr/index.php?title=Compresse_et_dimensionne_image_(Python)&amp;diff=4299&amp;oldid=prev</id>
		<title>Fylip22 le 15 novembre 2023 à 22:55</title>
		<link rel="alternate" type="text/html" href="https://kono.phpage.fr/index.php?title=Compresse_et_dimensionne_image_(Python)&amp;diff=4299&amp;oldid=prev"/>
		<updated>2023-11-15T22:55:48Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 16 novembre 2023 à 00:55&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l6&quot;&gt;Ligne 6 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 6 :&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* wxPython3.0-win64-3.0.2.0-py27.exe&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* wxPython3.0-win64-3.0.2.0-py27.exe&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Microsoft Windows, registre :&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Microsoft Windows, registre :&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;source&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Windows Registry Editor Version 5.00&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Windows Registry Editor Version 5.00&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l26&quot;&gt;Ligne 26 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 26 :&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\PythonPath]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\PythonPath]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;@=&amp;quot;C:\\Python27\\Lib;C:\\Python27\\DLLs;C:\\Python27\\Lib\\lib-tk&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;@=&amp;quot;C:\\Python27\\Lib;C:\\Python27\\DLLs;C:\\Python27\\Lib\\lib-tk&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;source&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;lang=&quot;python&quot;&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#! /usr/bin/env python&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#! /usr/bin/env python&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#-*- coding: iso-8859-15 -*-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#-*- coding: iso-8859-15 -*-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Fylip22</name></author>
	</entry>
	<entry>
		<id>https://kono.phpage.fr/index.php?title=Compresse_et_dimensionne_image_(Python)&amp;diff=2450&amp;oldid=prev</id>
		<title>Fylip22 le 2 mars 2021 à 09:50</title>
		<link rel="alternate" type="text/html" href="https://kono.phpage.fr/index.php?title=Compresse_et_dimensionne_image_(Python)&amp;diff=2450&amp;oldid=prev"/>
		<updated>2021-03-02T09:50:21Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 2 mars 2021 à 11:50&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Ligne 1 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 1 :&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;En Python, script qui redimensionne et compresse des images au format {{fichier|jpg}}.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;En Python, script qui redimensionne et compresse des images au format {{fichier|jpg}}.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Prérequis :&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* python-2.7.16.amd64.msi&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* PIL-1.1.7.win32-py2.7.exe&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* wxPython3.0-win64-3.0.2.0-py27.exe&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* Microsoft Windows, registre :&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;pre&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Windows Registry Editor Version 5.00&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\Help]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\Help\Main Python Documentation]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;@=&quot;C:\\Python27\\Doc\\python273.chm&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\InstallPath]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;@=&quot;C:\\Python27\\&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\InstallPath\InstallGroup]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;@=&quot;Python 2.7&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\Modules]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\PythonPath]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;@=&quot;C:\\Python27\\Lib;C:\\Python27\\DLLs;C:\\Python27\\Lib\\lib-tk&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/pre&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;----&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Fylip22</name></author>
	</entry>
	<entry>
		<id>https://kono.phpage.fr/index.php?title=Compresse_et_dimensionne_image_(Python)&amp;diff=2449&amp;oldid=prev</id>
		<title>Fylip22 le 2 mars 2021 à 09:48</title>
		<link rel="alternate" type="text/html" href="https://kono.phpage.fr/index.php?title=Compresse_et_dimensionne_image_(Python)&amp;diff=2449&amp;oldid=prev"/>
		<updated>2021-03-02T09:48:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://kono.phpage.fr/index.php?title=Compresse_et_dimensionne_image_(Python)&amp;amp;diff=2449&amp;amp;oldid=767&quot;&gt;Voir les modifications&lt;/a&gt;</summary>
		<author><name>Fylip22</name></author>
	</entry>
	<entry>
		<id>https://kono.phpage.fr/index.php?title=Compresse_et_dimensionne_image_(Python)&amp;diff=767&amp;oldid=prev</id>
		<title>Fylip22 : Page créée avec « En Python, script qui redimensionne et compresse des images au format {{fichier|jpg}}.  &lt;source lang=&quot;python&quot;&gt; #! /usr/bin/env python #-*- coding: iso-8859-15 -*-  import... »</title>
		<link rel="alternate" type="text/html" href="https://kono.phpage.fr/index.php?title=Compresse_et_dimensionne_image_(Python)&amp;diff=767&amp;oldid=prev"/>
		<updated>2017-11-02T15:32:39Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « En Python, script qui redimensionne et compresse des images au format {{fichier|jpg}}.  &amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt; #! /usr/bin/env python #-*- coding: iso-8859-15 -*-  import... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;En Python, script qui redimensionne et compresse des images au format {{fichier|jpg}}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#! /usr/bin/env python&lt;br /&gt;
#-*- coding: iso-8859-15 -*-&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import time&lt;br /&gt;
import thread&lt;br /&gt;
import Image&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    import wx&lt;br /&gt;
except ImportError:&lt;br /&gt;
    print u&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Installer wxPython pour utiliser ce programme&lt;br /&gt;
    À télecharger sur www.wxpython.org&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    sys.exit(0)&lt;br /&gt;
&lt;br /&gt;
import  wx.lib.newevent&lt;br /&gt;
&lt;br /&gt;
# ---------------------------------------------&lt;br /&gt;
# labels utilisées sur le bouton &amp;#039;btn_action&amp;#039;&lt;br /&gt;
# ---------------------------------------------&lt;br /&gt;
START_ACTION = u&amp;quot;Compresser&amp;quot;&lt;br /&gt;
STOP_ACTION = u&amp;quot;Arrêter&amp;quot;&lt;br /&gt;
# ---------------------------------------------&lt;br /&gt;
&lt;br /&gt;
# ---------------------------------------------&lt;br /&gt;
#creation d&amp;#039;evenement personnalisées&lt;br /&gt;
# ---------------------------------------------&lt;br /&gt;
(UpdateCountEvent, EVT_UPDATE_COUNT) = wx.lib.newevent.NewEvent()&lt;br /&gt;
(UpdateCompressEvent, EVT_UPDATE_COMPRESS) = wx.lib.newevent.NewEvent()&lt;br /&gt;
(StopCountEvent, EVT_STOP_COUNT) = wx.lib.newevent.NewEvent()&lt;br /&gt;
(InterruptCountEvent, EVT_INTERRUPT_COUNT) = wx.lib.newevent.NewEvent()&lt;br /&gt;
(StopCompressEvent, EVT_STOP_COMPRESS) = wx.lib.newevent.NewEvent()&lt;br /&gt;
(InterruptCompressEvent, EVT_INTERRUPT_COMPRESS) = wx.lib.newevent.NewEvent()&lt;br /&gt;
(ErrorCompressEvent, EVT_ERROR_COMPRESS) = wx.lib.newevent.NewEvent()&lt;br /&gt;
# ---------------------------------------------&lt;br /&gt;
&lt;br /&gt;
def pluralize(num):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    fonction qui renvoie un &amp;#039;s&amp;#039; si le nombre passé en&lt;br /&gt;
    argument est superieur à 1&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return num&amp;gt;1 and &amp;quot;s&amp;quot; or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def normalize(size):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    fonction qui prend en argument un nombre d&amp;#039;octets&lt;br /&gt;
    et renvoie la taille la plus adapté&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    seuil_Kio = 1024&lt;br /&gt;
    seuil_Mio = 1024 * 1024&lt;br /&gt;
    seuil_Gio = 1024 * 1024 * 1024&lt;br /&gt;
&lt;br /&gt;
    if size &amp;gt; seuil_Gio:&lt;br /&gt;
        return &amp;quot;%.2fGio&amp;quot; % (size/float(seuil_Gio))&lt;br /&gt;
    elif size &amp;gt; seuil_Mio:&lt;br /&gt;
        return &amp;quot;%.2fMio&amp;quot; % (size/float(seuil_Mio))&lt;br /&gt;
    elif size &amp;gt; seuil_Kio:&lt;br /&gt;
        return &amp;quot;%.2fKio&amp;quot; % (size/float(seuil_Kio))&lt;br /&gt;
    else:&lt;br /&gt;
        return &amp;quot;%io&amp;quot; % size&lt;br /&gt;
&lt;br /&gt;
def o_normalize(nb):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    fonction qui permet de separer un nombre par tranche de trois:&lt;br /&gt;
    o_normalize(1234567890) =&amp;gt; &amp;quot;1 234 567 890&amp;quot;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    nb = str(nb)[::-1] # 12345 =&amp;gt; &amp;quot;54321&amp;quot;&lt;br /&gt;
    l = []&lt;br /&gt;
    for i in range(0,len(nb),3):&lt;br /&gt;
        l.append(nb[i:i+3][::-1]) # [&amp;quot;345&amp;quot;, &amp;quot;12&amp;quot;]&lt;br /&gt;
    return &amp;quot; &amp;quot;.join(l[::-1]) # &amp;quot;12 345&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def get_jpegs(filenames):&lt;br /&gt;
    # liste comprehension pour filtrer les fichiers jpeg (.jpg, .jpeg, .JPEG, ..)&lt;br /&gt;
    return [f for f in filenames if os.path.splitext(f)[-1].lower() in [&amp;#039;.jpg&amp;#039;, &amp;#039;.jpeg&amp;#039;]]&lt;br /&gt;
&lt;br /&gt;
class CountThread(object):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Classe qui permet de compter le nombre de fichier jpeg &lt;br /&gt;
    dans un ensemble de dossier.&lt;br /&gt;
    Prend en parametre le dossier racine de la recherche&lt;br /&gt;
    et la fenetre (wx) a laquelle renvoyer les evenements &lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    def __init__(self, win, root_dir):&lt;br /&gt;
        self.win = win &lt;br /&gt;
        self.root_dir = root_dir&lt;br /&gt;
&lt;br /&gt;
    def Start(self):&lt;br /&gt;
        self.keepGoing = self.running = True&lt;br /&gt;
        thread.start_new_thread(self.Run, ())&lt;br /&gt;
&lt;br /&gt;
    def Stop(self):&lt;br /&gt;
        self.keepGoing = False&lt;br /&gt;
&lt;br /&gt;
    def IsRunning(self):&lt;br /&gt;
        return self.running&lt;br /&gt;
&lt;br /&gt;
    def Run(self):&lt;br /&gt;
        photos_count, dirs_count = 0, 0&lt;br /&gt;
        for dirpath, dirnames, filenames in os.walk(self.root_dir):&lt;br /&gt;
            photos = get_jpegs(filenames)&lt;br /&gt;
            if photos:&lt;br /&gt;
                photos_count += len(photos)&lt;br /&gt;
                dirs_count += 1&lt;br /&gt;
                evt = UpdateCountEvent(photos_count = photos_count,&lt;br /&gt;
                                                   dirs_count = dirs_count) &lt;br /&gt;
                wx.PostEvent(self.win, evt) &lt;br /&gt;
&lt;br /&gt;
            if not self.keepGoing:&lt;br /&gt;
                # en cas d&amp;#039;interruption du thread&lt;br /&gt;
                evt = InterruptCountEvent()&lt;br /&gt;
                wx.PostEvent(self.win, evt)&lt;br /&gt;
                self.running = False&lt;br /&gt;
                return&lt;br /&gt;
&lt;br /&gt;
        # le thread se termine normalement&lt;br /&gt;
        self.running = False&lt;br /&gt;
        evt = StopCountEvent(photos_count=photos_count, photo_dir=self.root_dir)&lt;br /&gt;
        wx.PostEvent(self.win, evt)&lt;br /&gt;
&lt;br /&gt;
class CompressThread(object):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Classe qui permet de recompresser les fichiers jpeg&lt;br /&gt;
    dans un ensemble de dossier.&lt;br /&gt;
    Prend en parametre le dossier racine de la recherche&lt;br /&gt;
    et la fenetre (wx) a laquelle renvoyer les evenements&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    def __init__(self, win, root_dir):&lt;br /&gt;
        self.win = win&lt;br /&gt;
        self.root_dir = root_dir&lt;br /&gt;
&lt;br /&gt;
    def Start(self):&lt;br /&gt;
        self.keepGoing = self.running = True&lt;br /&gt;
        thread.start_new_thread(self.Run, ())&lt;br /&gt;
&lt;br /&gt;
    def Stop(self):&lt;br /&gt;
        self.keepGoing = False&lt;br /&gt;
&lt;br /&gt;
    def IsRunning(self):&lt;br /&gt;
        return self.running&lt;br /&gt;
&lt;br /&gt;
    def Run(self):&lt;br /&gt;
        photos_count, dirs_count = 0, 0&lt;br /&gt;
        for dirpath, dirnames, filenames in os.walk(self.root_dir):&lt;br /&gt;
            photos = get_jpegs(filenames)&lt;br /&gt;
            if photos:&lt;br /&gt;
                for f in photos:&lt;br /&gt;
                    if not self.keepGoing:&lt;br /&gt;
                        break&lt;br /&gt;
                    try:&lt;br /&gt;
                        name = os.path.join(dirpath, f)&lt;br /&gt;
                        original_size = os.path.getsize(name)&lt;br /&gt;
                        im = Image.open(name)&lt;br /&gt;
&lt;br /&gt;
# traitement de la taille de l&amp;#039;image&lt;br /&gt;
                        hauteur, largeur=im.size&lt;br /&gt;
                        dimmax=max(hauteur, largeur)&lt;br /&gt;
                        dimmin=min(hauteur, largeur)&lt;br /&gt;
                        rapportdim=float(dimmax)/float(dimmin)&lt;br /&gt;
                        if largeur==dimmax:&lt;br /&gt;
                            nouvhauteur=int(1024/rapportdim)&lt;br /&gt;
                            nouvlargeur=1024&lt;br /&gt;
                        else:&lt;br /&gt;
                            nouvhauteur=1024&lt;br /&gt;
                            nouvlargeur=int(1024/rapportdim)&lt;br /&gt;
                        im2 = im.resize((nouvhauteur, nouvlargeur), Image.NEAREST) # use nearest neighbour&lt;br /&gt;
&lt;br /&gt;
# fin traitement de la taille de l&amp;#039;image                        &lt;br /&gt;
                        im2.save(name)&lt;br /&gt;
                        compress_size = os.path.getsize(name)&lt;br /&gt;
                    except IOError:&lt;br /&gt;
                        evt = ErrorCompressEvent(&lt;br /&gt;
                    message=u&amp;quot;Erreur lors du traitement du fichier &amp;#039;%s&amp;#039;&amp;quot; % name)&lt;br /&gt;
                        wx.PostEvent(self.win, evt)&lt;br /&gt;
                    else:&lt;br /&gt;
                        evt = UpdateCompressEvent(&lt;br /&gt;
                            original_size = original_size,&lt;br /&gt;
                            compress_size = compress_size)&lt;br /&gt;
                        wx.PostEvent(self.win, evt)&lt;br /&gt;
&lt;br /&gt;
            if not self.keepGoing:&lt;br /&gt;
                # interruption du traitement&lt;br /&gt;
                evt = InterruptCompressEvent()&lt;br /&gt;
                wx.PostEvent(self.win, evt)&lt;br /&gt;
                self.running = False&lt;br /&gt;
                return&lt;br /&gt;
&lt;br /&gt;
        self.running = False&lt;br /&gt;
        evt = StopCompressEvent()&lt;br /&gt;
        wx.PostEvent(self.win, evt)&lt;br /&gt;
&lt;br /&gt;
class MainFrame(wx.Frame):&lt;br /&gt;
    def __init__(self, *args, **kwargs):&lt;br /&gt;
        wx.Frame.__init__(self, *args, **kwargs)&lt;br /&gt;
        self.CreateWidgets()&lt;br /&gt;
        self.DoLayout()&lt;br /&gt;
        self.DoBinding()&lt;br /&gt;
        self.SetInitialValues()&lt;br /&gt;
&lt;br /&gt;
    def CreateWidgets(self):&lt;br /&gt;
        panel = self.panel = wx.Panel(self)&lt;br /&gt;
        self.staticText_dir = wx.StaticText(panel, -1, u&amp;quot;Répertoire à recompresser :&amp;quot;)&lt;br /&gt;
        self.textCtrl_dir = wx.TextCtrl(panel, -1, &amp;quot;&amp;quot;, style=wx.TE_READONLY)&lt;br /&gt;
        self.btn_dir = wx.Button(panel, -1, &amp;quot;...&amp;quot;, size=(30, -1))&lt;br /&gt;
        self.btn_action = wx.Button(panel, -1)&lt;br /&gt;
        font = wx.Font(family=wx.FONTFAMILY_DEFAULT, style=wx.FONTSTYLE_NORMAL, weight=wx.FONTWEIGHT_NORMAL, pointSize=18)&lt;br /&gt;
        self.btn_action.SetFont(font)&lt;br /&gt;
        self.btn_action.SetLabel(START_ACTION)&lt;br /&gt;
        self.statusBar = wx.StatusBar(self)&lt;br /&gt;
        self.statusBar.SetFieldsCount(4)&lt;br /&gt;
        self.statusBar.SetStatusWidths([-3, -2, -1, -1])&lt;br /&gt;
        self.SetStatusBar(self.statusBar)&lt;br /&gt;
&lt;br /&gt;
    def DoLayout(self):&lt;br /&gt;
        szr = wx.GridBagSizer(5, 5)&lt;br /&gt;
        szr.Add(self.staticText_dir, (0, 0), flag=wx.ALIGN_CENTRE)&lt;br /&gt;
        szr.Add(self.textCtrl_dir, (0, 1), flag=wx.EXPAND | wx.ALIGN_CENTRE_HORIZONTAL)&lt;br /&gt;
        szr.Add(self.btn_dir, (0, 2), flag=wx.ALIGN_CENTRE_HORIZONTAL)&lt;br /&gt;
        szr.AddGrowableCol(1)&lt;br /&gt;
        main_szr = wx.GridBagSizer(5, 5)&lt;br /&gt;
        main_szr.Add((0, 0), (0, 0))&lt;br /&gt;
        main_szr.Add(szr, (1,1), flag=wx.EXPAND)&lt;br /&gt;
        main_szr.Add(self.btn_action, (2, 1), flag=wx.EXPAND)&lt;br /&gt;
        main_szr.Add((0, 0), (3, 2))&lt;br /&gt;
        main_szr.AddGrowableCol(1)&lt;br /&gt;
        main_szr.AddGrowableRow(2)&lt;br /&gt;
        self.panel.SetSizerAndFit(main_szr)&lt;br /&gt;
        self.SetSize((500, 200))&lt;br /&gt;
        self.SetMinSize((500, 200))&lt;br /&gt;
&lt;br /&gt;
    def DoBinding(self):&lt;br /&gt;
        self.Bind(wx.EVT_BUTTON, self.OnBtnDir, self.btn_dir)&lt;br /&gt;
        self.Bind(wx.EVT_BUTTON, self.OnBtnAction, self.btn_action)&lt;br /&gt;
        self.Bind(EVT_UPDATE_COUNT, self.OnUpdateCount)&lt;br /&gt;
        self.Bind(EVT_UPDATE_COMPRESS, self.OnUpdateCompress)&lt;br /&gt;
        self.Bind(EVT_STOP_COUNT, self.OnStopCount)&lt;br /&gt;
        self.Bind(EVT_STOP_COMPRESS, self.OnStopCompress)&lt;br /&gt;
        self.Bind(EVT_INTERRUPT_COUNT, self.OnInterrupt)&lt;br /&gt;
        self.Bind(EVT_INTERRUPT_COMPRESS, self.OnInterrupt)&lt;br /&gt;
        self.Bind(EVT_ERROR_COMPRESS, self.OnErrorCompress)&lt;br /&gt;
        self.Bind(wx.EVT_CLOSE, self.OnClose)&lt;br /&gt;
&lt;br /&gt;
    def SetInitialValues(self):&lt;br /&gt;
        self.count_thread = None&lt;br /&gt;
        self.compress_thread = None&lt;br /&gt;
        self.original_size = 0&lt;br /&gt;
        self.compress_size = 0&lt;br /&gt;
        self.compressed_photo = 0&lt;br /&gt;
        self.error = 0&lt;br /&gt;
        for i in range(self.StatusBar.GetFieldsCount()):&lt;br /&gt;
            self.StatusBar.SetStatusText(&amp;#039;&amp;#039;, i)&lt;br /&gt;
&lt;br /&gt;
    def OnClose(self, evt):&lt;br /&gt;
        self.StopThreads()&lt;br /&gt;
        evt.Skip()&lt;br /&gt;
&lt;br /&gt;
    def OnBtnDir(self, evt):&lt;br /&gt;
        photo_dir = self.textCtrl_dir.GetValue()&lt;br /&gt;
        if os.path.isdir(photo_dir):&lt;br /&gt;
            defaultPath = photo_dir&lt;br /&gt;
        else:&lt;br /&gt;
            defaultPath = &amp;quot;&amp;quot;&lt;br /&gt;
        dlg = wx.DirDialog(self, u&amp;quot;Choissisez le répertoire à recompresser&amp;quot;, defaultPath=defaultPath)&lt;br /&gt;
        if dlg.ShowModal() == wx.ID_OK:&lt;br /&gt;
            self.textCtrl_dir.SetValue(dlg.GetPath())&lt;br /&gt;
        dlg.Destroy()&lt;br /&gt;
        evt.Skip()&lt;br /&gt;
&lt;br /&gt;
    def OnBtnAction(self, evt):&lt;br /&gt;
        action = self.btn_action.GetLabel()&lt;br /&gt;
        if action == START_ACTION:&lt;br /&gt;
            photo_dir = self.textCtrl_dir.GetValue()&lt;br /&gt;
            evt.Skip()&lt;br /&gt;
            if not os.path.isdir(photo_dir):&lt;br /&gt;
                dlg = wx.MessageDialog(self, u&amp;#039;Répertoire invalide&amp;#039;, &amp;#039;Erreur&amp;#039;, wx.OK | wx.ICON_ERROR)&lt;br /&gt;
                dlg.ShowModal()&lt;br /&gt;
                dlg.Destroy()&lt;br /&gt;
                return False&lt;br /&gt;
            self.StartAction(photo_dir)&lt;br /&gt;
        elif action == STOP_ACTION:&lt;br /&gt;
            self.StopThreads()&lt;br /&gt;
&lt;br /&gt;
    def StopThreads(self):&lt;br /&gt;
            busy = wx.BusyInfo(u&amp;#039;Arrêt en cours... Veuillez patienter&amp;#039;)&lt;br /&gt;
            wx.Yield()&lt;br /&gt;
            for thrd in self.count_thread, self.compress_thread:&lt;br /&gt;
                if thrd and thrd.IsRunning():&lt;br /&gt;
                    thrd.Stop()&lt;br /&gt;
                    while thrd.IsRunning():&lt;br /&gt;
                        time.sleep(0.1)&lt;br /&gt;
            self.SetInitialValues()&lt;br /&gt;
            self.btn_action.SetLabel(START_ACTION)&lt;br /&gt;
&lt;br /&gt;
    def StartAction(self, photo_dir):&lt;br /&gt;
        self.SetInitialValues()&lt;br /&gt;
        self.statusBar.SetStatusText(u&amp;quot;Trouvé 0 photo dans 0 répertoire&amp;quot;)&lt;br /&gt;
        self.btn_dir.Enable(False)&lt;br /&gt;
        self.count_thread = CountThread(self, photo_dir)&lt;br /&gt;
        self.count_thread.Start()&lt;br /&gt;
        self.btn_action.SetLabel(STOP_ACTION)&lt;br /&gt;
&lt;br /&gt;
    def OnUpdateCount(self, evt):&lt;br /&gt;
        photos_count, dirs_count = evt.photos_count, evt.dirs_count&lt;br /&gt;
        self.statusBar.SetStatusText(u&amp;quot;Trouvé %i photo%s dans %i répertoire%s&amp;quot; %&lt;br /&gt;
                (photos_count, &lt;br /&gt;
                pluralize(photos_count),&lt;br /&gt;
                 dirs_count,&lt;br /&gt;
                 pluralize(dirs_count)))&lt;br /&gt;
  &lt;br /&gt;
    def OnStopCount(self, evt):&lt;br /&gt;
        self.count_thread = None&lt;br /&gt;
        self.photos_count = evt.photos_count&lt;br /&gt;
        self.compress_thread = CompressThread(self, evt.photo_dir)&lt;br /&gt;
        self.compress_thread.Start()&lt;br /&gt;
&lt;br /&gt;
    def OnInterrupt(self, evt):&lt;br /&gt;
        self.SetInitialValues()&lt;br /&gt;
        self.statusBar.SetStatusText(&amp;#039;Action interrompue !&amp;#039;)&lt;br /&gt;
        self.btn_action.SetLabel(START_ACTION)&lt;br /&gt;
        self.btn_dir.Enable(True)&lt;br /&gt;
&lt;br /&gt;
    def OnStopCompress(self, evt):&lt;br /&gt;
        if self.photos_count:&lt;br /&gt;
            dlg = wx.MessageDialog(self, u&amp;quot;&amp;quot;&amp;quot;traitement terminée!&lt;br /&gt;
%i image%s compressée%s&lt;br /&gt;
%i erreur%s&lt;br /&gt;
taille originale: %s octets&lt;br /&gt;
taille finale: %s octets&lt;br /&gt;
gain: %s soit %i%%&amp;quot;&amp;quot;&amp;quot; % (self.photos_count, pluralize(self.photos_count),&lt;br /&gt;
                       pluralize(self.photos_count),&lt;br /&gt;
               self.error, pluralize(self.error),&lt;br /&gt;
                       o_normalize(self.original_size),&lt;br /&gt;
                       o_normalize(self.compress_size),&lt;br /&gt;
                       normalize(self.original_size - self.compress_size),&lt;br /&gt;
                      ((self.original_size - self.compress_size) / float(self.original_size) * 100)),&lt;br /&gt;
               &amp;#039;fin du traitement&amp;#039;, wx.OK | wx.ICON_INFORMATION)&lt;br /&gt;
        else:&lt;br /&gt;
            dlg = wx.MessageDialog(self, &lt;br /&gt;
            u&amp;quot;Aucune photo à recompresser.&amp;quot;,&lt;br /&gt;
               &amp;#039;Fin du traitement&amp;#039;, &lt;br /&gt;
           wx.OK | wx.ICON_INFORMATION)&lt;br /&gt;
        dlg.ShowModal()&lt;br /&gt;
        dlg.Destroy()&lt;br /&gt;
        self.SetInitialValues()&lt;br /&gt;
        self.statusBar.SetStatusText(u&amp;#039;Compression terminée&amp;#039;)&lt;br /&gt;
        self.btn_action.SetLabel(START_ACTION)&lt;br /&gt;
        self.btn_dir.Enable(True)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    def OnUpdateCompress(self, evt):&lt;br /&gt;
        self.compressed_photo += 1&lt;br /&gt;
        self.original_size += evt.original_size&lt;br /&gt;
        self.compress_size += evt.compress_size&lt;br /&gt;
        self.statusBar.SetStatusText(&amp;quot;%i/%i&amp;quot; % &lt;br /&gt;
              (self.compressed_photo, self.photos_count), 2)&lt;br /&gt;
        self.statusBar.SetStatusText(&amp;quot;%s =&amp;gt; %s&amp;quot; %&lt;br /&gt;
              (normalize(self.original_size), normalize(self.compress_size)), 1)&lt;br /&gt;
        self.statusBar.SetStatusText(&amp;quot;%i%%&amp;quot; %&lt;br /&gt;
              (int(round(100*self.compressed_photo//self.photos_count))), 3)&lt;br /&gt;
&lt;br /&gt;
    def OnErrorCompress(self, evt):&lt;br /&gt;
        print evt.message&lt;br /&gt;
        self.error += 1&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    app = wx.PySimpleApp(redirect=False)&lt;br /&gt;
    fr = MainFrame(None, -1, &amp;quot;Recompresseur de photos (taille max 1024 px)&amp;quot;)&lt;br /&gt;
    fr.Show(True)&lt;br /&gt;
    app.MainLoop()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Python]]&lt;/div&gt;</summary>
		<author><name>Fylip22</name></author>
	</entry>
</feed>