[RESOLU] Convertir une image jpg, bmp, gif en png dans un upload

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Convertir une image jpg, bmp, gif en png dans un upload

Re: [RESOLU] Convertir une image jpg, bmp, gif en png dans u

par ;,; » 13 juin 2014, 18:06

;:;:;:;

Re: Convertir une image jpg, bmp, gif en png dans un upload

par AB » 03 mars 2012, 22:36

Bon alors petite mise au point : il faut plutôt voir ces différents formats image selon leur capacité à traiter les images plutôt que suivant des licences d'utilisation qui n'ont jamais posé de problème pour leur utilisation.

Le format PNG à été conçu pour supporter plusieurs type d'images.

- Le format PNG 8 (8bits) peut avantageusement remplacer le format GIF - gestion de la transparence, optimisation de la compression moyenne.
- Le format PNG 24 ou PNG 32... (24 ou 32 bits ou plus) est un format de travail qui peut parfois être utilisé sur le web mais pas pour des photos car l'image n'est pas compressée et dans ce cas les photos sont très lourdes.

Le format PNG 8 possède les même inconvénients que le GIF c'est à dire qu'il ne gère pas les dégradés (8 bits permettant trop peu de nuances).

Donc le format PNG n'est pas adapté au traitement des photos destinées au web (qui nécessitent une bonne qualité des dégradés avec compression) et il n'a jamais été prévu pour cela.

En résumé, autant on peut envisager de transformer une image gif au format png (y'a pas ou peu d'intérêt mais bon...), autant il est incongru de vouloir transformer une photo jpg au format png. Car se sera, soit du PNG 8 et dans ce cas l'image perdra ses dégradés, soit du PNG 24 et dans ce cas la photo sera beaucoup plus lourde inutilement.

Si facebook (ou les autres) ont une majorité d'images en jpg c'est parce que les auteurs des photos les envoient au format natif de leur appareil photo (jpg pour les formats compressés) et qu'il n'y a aucune raison de modifier ce format. Le seul traitement consiste donc en un redimensionnement si besoin.

Donc la solution standard est d'accepter pour l'upload les formats png, gif et jpg (couvrant les deux formats d'images et les photos) et de faire un redimensionnement si besoin pour être compatible avec la présentation du site. Au passage il est souvent intéressant de faire une optimisation pour le web pour les formats png et jpg - troisième paramètre des fonctions "imagejpeg" et "imagepng", non disponible pour le format gif - qui permettra d'imposer une compression minimum pour que les images ne soient pas trop lourdes.

Re: Convertir une image jpg, bmp, gif en png dans un upload

par sirakawa » 01 mars 2012, 11:41

Eau puisée dans mon écluse pour alimenter le moulin de moogli:
Je me fiais aux affirmations du site GNU sur les performances de PNG, et, effectivement, sur les images que je traitais (des copies d'écrans pour l'essentiel) le gain était assez spectaculaire. L'avantage en est, pour des images destinées à illustrer entre autres, de gérer la transparence. Pour les animations, comme je n'ai jamais aimé, et que je n'en ai pas besoin, la question ne se posait pas.

Mais, hier, j'ai fait, avec GIMP, des tests que j'ai déja rapportés et qui concluent, comme le site PNG lui-même, à douter de l'efficacité de ce format. Au mieux l'image d e1,9 Mo avec compression maximale est passée à 1, Mo en PNG.
D'autant plus que, après vérification, le format GIF est maintenant libre.
Il me semble que jpg a un meilleur rendu...

Re: Convertir une image jpg, bmp, gif en png dans un upload

par moogli » 01 mars 2012, 11:07

Le dernier code permet l'upload de différent format tu peut restreindre le poids et la taille du fichier et en refuser l'emplois si plus lourd au prévu. 20 à 100ko sont suffisant pour un avatar.
La limitation de la taille est, a mon sens, obligatoire pour ne pas bousiller ta charte graphique ;)

@+

J'allais oublier : png remplaçant de gif, mais quid de l'annimation ? (que seul gif propose) même si j'en suis ma forcément fan ça reste très utilisé ^^

Re: Convertir une image jpg, bmp, gif en png dans un upload

par sirakawa » 01 mars 2012, 09:49

Je crois que voici des éléments de réponse:
Le jpg n'est pas plus gourmand que le png.
les jpg sont souvent plus légères que les png mais elles ne supportent pas la transparence.
la même image http://www.libpng.org/pub/png/img_png/IceAlpha.png
en png 1.7Mo, en jpg: 114.5 Ko, en gif 197Ko
Un conseil des auteurs :
(Note that for transmission of finished truecolor images--especially photographic ones--JPEG is almost always a better choice. Although JPEG's lossy compression can introduce visible artifacts, these can be minimized, and the savings in file size even at high quality levels is much better than is generally possible with a lossless format like PNG. And for black-and-white images, particularly of text or drawings, TIFF's Group 4 fax compression or the JBIG format are often far better than 1-bit grayscale PNG.)

Re: Convertir une image jpg, bmp, gif en png dans un upload

par nico44530 » 29 févr. 2012, 22:47

Ou alors il y a une autre alternative à la conversion d'images, c'est d'accepter tous les formats d'images dans l'upload.
Mais ça va prendre beaucoup de place sur le serveur ? (J'ai que 30 Go dans mon espace disque)
Comment fait Facebook pour que la majorité de ses images soient des jpg ?
Il doit les convertir... ?

Je voudrais des avis sur la première question s'il vous plais :wink:

Merci :roll:

Re: Convertir une image jpg, bmp, gif en png dans un upload

par sirakawa » 29 févr. 2012, 21:52

http://www.w3.org/Graphics/PNG/ :
PNG is an extensible file format for the lossless, portable, well-compressed storage of raster images. PNG provides a patent-free replacement for GIF and can also replace many common uses of TIFF. Indexed-color, grayscale, and truecolor images are supported, plus an optional alpha channel for transparency. Sample depths range from 1 to 16 bits per component (up to 48bit images for RGB, or 64bit for RGBA).
Si ça ne suffit pas à expliquer le choix de png!
Quant à savannah, c'est une forge libre GNU, rien de moins, rien de plus...
http://savannah.gnu.org/

Re: Convertir une image jpg, bmp, gif en png dans un upload

par sirakawa » 29 févr. 2012, 21:38

Il serait bien que le manuel officiel soit mis à jour:
Cette lecture:
Pour activer le support de GD, vous devez compiler PHP avec l'option --with-gd[=DIR] , où DIR est le dossier d'installation de GD. Il est recommandé d'utiliser la version de GD qui est distribuée avec PHP, en utilisant simplement l'option --with-gd . La bibliothèque GD requiert libpng et libjpeg pour compiler.
m'avait conduit à penser qu'une application portable incluant la bibliothèque GD était impossible.
Or, d'après les contributions, il semblerait qu'il existe mainenant un PHP incluant GD au moins sous CENTOS et Debian.
Il serait intéressant d'en savoir plus sur ce point: autres distributions, autres systèmes...

Re: Convertir une image jpg, bmp, gif en png dans un upload

par moogli » 29 févr. 2012, 21:32

Problème de licence d'un format ?
Si on s'arrête autant pas se faire chier il va devoir valider les trucs à la main pour savoir s'il n'y pas de droit sur l'image (quelque soit le format de l'image) étant donné que c'est chose au moins aussi importante.

D'ailleurs pourquoi mettre des images ça sert à rien ^^

Je pense pas que le problème d'origine soit un problème de licence fumeuse ou non mais il problème d'incompréhension de ce qui est ou pas réalisable (enfin c'est ce qu'il ressort des réponses).

Peut être que regarderais un jour les licences sur les formats d'image. Ça m'amuserais de voir qui en tiens compte (hors mis ton exemple que je ne connais pas ^^).

Bref il fait comme il veux mais a mon avis le plus simple sera le mieux !


@+

Re: Convertir une image jpg, bmp, gif en png dans un upload

par Mazarini » 29 févr. 2012, 16:38

...ImagePng en utilisant les deux arguments...
Effectivement, j'avais lu en diagonal, j'aurai appris un truc aujourd'hui.
La combinaison imagecreatefromTruc() + imagepng() me semble bien.
Au passage getimagesize() ou exif_imagetype() permettent de connaitre le type de fichier image.

Re: Convertir une image jpg, bmp, gif en png dans un upload

par sirakawa » 29 févr. 2012, 16:03

Si tu ne vois pas l'intérêt d'utiliser un format libre, libre pour toi... Mais relis les licences des autres formats... et explique-moi pourquoi certains formats (le .gif, au moins) sont exclus, par exemple, de Savanah...
Non compris les différences de tailles et de performances...

Re: Convertir une image jpg, bmp, gif en png dans un upload

par moogli » 29 févr. 2012, 15:16

1/ création d'un ressource image (imagecreatefromtruc (ou truc correspond au format de l'image)
2/ enregistrement en png ImagePng en utilisant les deux arguments

Je ne vois vraiment pas pourquoi tu veux faire ça, y a pas d'intérêt, autant gérer l'affichage, c'est trop limiter la ^^

@+

Re: Convertir une image jpg, bmp, gif en png dans un upload

par Mazarini » 29 févr. 2012, 12:16

J'ai vu dans la doc qu'il est possible de créer une image à partir d'un fichier (gif, jpeg...) et de l'envoyer au navigateur au format png. Par contre, je n'ai pas trouvé comment sauvegarder l'image via php. Peut être en utilisant le buffering (fonctions ob_*).

Re: Convertir une image jpg, bmp, gif en png dans un upload

par sirakawa » 28 févr. 2012, 22:59

Rien compris non plus au rôle de GD là-dedans.
J'aurais aime me débarraser de Imagemagick en ligne de commande, (via system() ou exec())
imagemegick convert... dont l'inconvénient est d'être lié à la plateforme...
Rien vu sur convert dans la bibliothèque Imagemagick de PHP d'où la solution que j'emploie...

Re: Convertir une image jpg, bmp, gif en png dans un upload

par nico44530 » 28 févr. 2012, 21:09

Donc je fais comme ca :
<?php 
session_start();
require("../config.php");

$sql = connect_sql();
$pseudo_membre = $_SESSION['pseudo'];
$requete = mysql_query("SELECT id FROM admin_communaute WHERE `pseudo`='$pseudo_membre'");
$result = mysql_fetch_array ($requete);
$id = $result['id'];

/************************************************************
 * Definition des constantes / tableaux et variables *
 ************************************************************/

// Constantes
define('TARGET', 'upload/');    // Repertoire cible
define('MAX_SIZE', 100000);    // Taille max en octets du fichier
define('WIDTH_MAX', 800);    // Largeur max de l'image en pixels
define('HEIGHT_MAX', 800);    // Hauteur max de l'image en pixels

// Tableaux de donnees
$tabExt = array('jpg','gif','png','jpeg');    // Extensions autorisees
$infosImg = array();

// Variables
$extension = '';
$message = '';
$nomImage = '';

/************************************************************
 * Creation du repertoire cible si inexistant *
 ************************************************************/
if( !is_dir(TARGET) ) {
  if( !mkdir(TARGET, 0755) ) {
  exit('Erreur : le répertoire cible ne peut-être créé ! Vérifiez que vous diposiez des droits suffisants pour le faire ou créez le manuellement !');  
  }
}

/************************************************************
 * Script d'upload *
 ************************************************************/
if(!empty($_POST)){
  // On verifie si le champ est rempli
  if( !empty($_FILES['fichier']['name']) )
  {
  // Recuperation de l'extension du fichier
  $extension  = pathinfo($_FILES['fichier']['name'], PATHINFO_EXTENSION);
  // On verifie l'extension du fichier
  if(in_array(strtolower($extension),$tabExt))
  {
  // On recupere les dimensions du fichier
  $infosImg = getimagesize($_FILES['fichier']['tmp_name']);
  // On verifie le type de l'image
  if($infosImg[2] >= 1 && $infosImg[2] <= 14)
  {
  // On verifie les dimensions et taille de l'image
  if(($infosImg[0] <= WIDTH_MAX) && ($infosImg[1] <= HEIGHT_MAX) && (filesize($_FILES['fichier']['tmp_name']) <= MAX_SIZE))
  {
  // Parcours du tableau d'erreurs
  if(isset($_FILES['fichier']['error'])
  && UPLOAD_ERR_OK === $_FILES['fichier']['error'])
  {
  // On renomme le fichier
  $nomImage = $id .'.'. $extension;
  header ("Content-type: image/png"); // Type png
  ImagePng ($image); // Je crée l'image
  // Si c'est OK, on teste l'upload
  if(move_uploaded_file($_FILES['fichier']['tmp_name'], TARGET.$nomImage))
  {
  header('Location: index.php');
  }
  else
  {
  // Sinon on affiche une erreur systeme
  $message = 'Problème lors de l\'upload !';
  }
  }
  else
  {
  $message = 'Une erreur interne a empêché l\'uplaod de l\'image';
  }
  }
  else
  {
  // Sinon erreur sur les dimensions et taille de l'image
  $message = 'Erreur dans les dimensions de l\'image !';
  }
  }
  else
  {
  // Sinon erreur sur le type de l'image
  $message = 'Le fichier à uploader n\'est pas une image !';
  }
  }
  else
  {
  // Sinon on affiche une erreur pour l'extension
  $message = 'L\'extension du fichier est incorrecte !';
  }
  }
  else
  {
  // Sinon on affiche une erreur pour le champ vide
  $message = 'Veuillez remplir le formulaire svp !';
  }
  }
?>
Mais j'ai rien compris dans le tuto :

Je veux pas créer d'image, je veux juste transformer un jpg... en png
Dans le tuto le format de l'image est en php

:cry: Je comprend pas tout :(

Au pire explique moi un script de conversion d'extension d'image avant d'upload sur le serveur :D please !