OVH Cloud OVH Cloud

GD + MySQL

3 réponses
Avatar
Damien Viel
Bonjour à tous.

J'essaie de redimensionner une image qui est stockée dans une table MySQL
mais j'obtiens une erreur lorsque je passe ma variable aux fonctions
imagecreatefromjpeg(), getimagesize() et imagecopyresized() . Il faut leurs
passer un fichier et non une variable mémoire. Mais je n'ai pas envie de
creer des fichiers pour faire cela, même temporairement. Je doit travailler
en memoire. Qq a-t-il une solution ?

<?php
if (isset($id)) {
require ("./conf/config.inc.php");
$res = mysql_query ("SELECT * FROM images WHERE id=$id");
if (mysql_num_rows($res)>0) {
header( "Content-Type: image/jpg");
$temp = mysql_result($res,0,pics);
$srcImg = imagecreatefromjpeg($temp);
$srcSize = getimagesize($temp);
$dstImg = imagecreatetruecolor(50,50);
imagecopyresized($dstImg, $srcImg, 0, 0, 0, 0, 50, 50, $srcSize[0],
$srcSize[1]);
imagejpeg($dstImg);
imagedestroy($scrImg);
imagedestroy($dstImg);
}
}
?>
Merci.
Damien

--
# Damien Viel
# damien@studioclick.fr
# http://www.studioclick.fr


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.543 / Virus Database: 337 - Release Date: 21/11/2003

3 réponses

Avatar
Jean-Marc Molina
Bonjour Damien,

Par expérience je te conseille d'utiliser des fichiers pour stocker tes
variables.
Les stocker dans ta base est inutile et inadapté.
J'avais adopté cette solution en pensant que les BLOBs pouvaient répondre à
tous mes problèmes, comme si MySQL était un SGBD objet... Non non.
Niveau inconvénients :
- Images inacessibles à partir d'un logiciel extérieur (visualisation,
édition...)
- Surcharge la BDD pour rien (ça prend de la place les images)
- Affichage laborieux d'une simple image : extraction de la BDD, génération
d'une nouvelle image à partir des données...

La solution c'est d'utiliser une table images qui s'occupe de faire le lien
entre les modèles de ta BDD et les fichiers. Par exemple si tu veux gérer
les photos des membres de ton site, tu as une table membres avec des champs
comme id, nom, prénom... Tu peux alors te servir de l'id (PRIMARY KEY) pour
nommer tes fichiers : 1.jpg, 2.jpg, etc... Et je ne te parle même pas du
bénéf quand il s'agit de générer des miniatures !

Alors toujours pas convaincu ? ^^.

Désolé mais j'ai préféré te proposer une meilleure solution plutôt que de
trouver l'erreur dans ton script, ça doit venir d'un stripslashes manquant.
On en a beaucoup parlé sur PHPBuilder suite à un article publié voilà
quelques mois, si le coeur et ton anglais t'en disent, vas faire un tour
là-bas :).

JM

--
Europe > France > Lyon
Clé AntiPourriel : PASUNPOURRIEL (ne pas retirer)
Avatar
Jedi121
Et une sixième copie en multipost du message!
Réponse sur alt.comp.lang.php

En gros c'est imagecreatefromstring() la fonction qu'il te faut.
Avatar
Jedi121
"Damien Viel" a écrit le 26/11/2003 :
J'essaie de redimensionner une image qui est stockée dans une table MySQL
mais j'obtiens une erreur lorsque je passe ma variable aux fonctions
imagecreatefromjpeg(), getimagesize() et imagecopyresized() . Il faut leurs
passer un fichier et non une variable mémoire. Mais je n'ai pas envie de
creer des fichiers pour faire cela, même temporairement. Je doit travailler
en memoire. Qq a-t-il une solution ?


Utiliser la fonction imagecreatefromstring()

<?php
if (isset($id)) {
require ("./conf/config.inc.php");
$res = mysql_query ("SELECT * FROM images WHERE id=$id");
if (mysql_num_rows($res)>0) {
header( "Content-Type: image/jpg");
$temp = mysql_result($res,0,pics);

$srcImg = imagecreatefromjpeg($temp);
Remplacer par :

$srcImg = imagecreatefromstring($temp);

$srcSize = getimagesize($temp);
$dstImg = imagecreatetruecolor(50,50);
imagecopyresized($dstImg, $srcImg, 0, 0, 0, 0, 50, 50, $srcSize[0],
$srcSize[1]);
imagejpeg($dstImg);
imagedestroy($scrImg);
imagedestroy($dstImg);
}
}
?>