Transformation d'une image binaire lue d'une DB SQL

bob_morane
Invité n'ayant pas de compte PHPfrance

01 août 2009, 20:09

Bonjour,
je commence par le plus charmant :wink:
Cette phrase ne s'adressait pas à toi. Je ne voulais pas être désagréable et je ne pense pas l'avoir été, si tel est le cas, je m'en excuse
mais les réponses de Nolem étaient un peu bizarre, non?
:shock:

Pour le code, ton analyse est bonne. (point 1 et 2)
Pour le 3, j'ai plusieurs php que j'essaie de regrouper.

Pour la ligne $type = @mysql_result($resultat,0,images_binaires.type_fichier);
il n'y a pas undersore.
images_binaires est ma table. type_fichier un champ qui contient jpg, gif, bmp etc...

Pour lire l'image, dans la table, j'avais aussi fait ça:


$requete = "SELECT donnees_binaires,type_fichier FROM images_binaires WHERE id=$id";
$resultat = mysql_query($requete);
$donnees = @mysql_result($resultat,images_binaires.donnees_binaires);
$type = @mysql_result($resultat,0,images_binaires.type_fichier);

header( "content-type: $type");
echo $donnees;
mysql_close();

(fonction appelée par un html qui affiche bien l'image)

Ce que je veux faire, c'est au lieu d'afficher $donnees, faire d'abord le merge avec le logo.
Donc c'est passer le $donnees (et le logo)à la fonction imagecopymerge. C'est ça qui ne fonctionne pas.

Merci.

PS: je poste en anonyme car je n'ai plus mon mot de passe (J'ai demandé une restauration...)

Eléphant du PHP | 369 Messages

01 août 2009, 21:17

Bonjour,
je commence par le plus charmant :wink:
Cette phrase ne s'adressait pas à toi.
Je sais bien sinon je serais plus revenu sur le topic, mais c'est pas une raison ;)
Je ne voulais pas être désagréable et je ne pense pas l'avoir été, si tel est le cas, je m'en excuse
mais les réponses de Nolem étaient un peu bizarre, non? :shock:
Bizarre ou pas je pense que tu dois le respect à chacune des personnes essayant de t'aider ;)

--- Sujet clos
Pour le code, ton analyse est bonne. (point 1 et 2)
Pour le 3, j'ai plusieurs php que j'essaie de regrouper.
Pour la ligne $type = @mysql_result($resultat,0,images_binaires.type_fichier);
[*]il n'y a pas undersore. images_binaires est ma table. type_fichier un champ qui
contient jpg, gif, bmp etc...
[*]Autant pour moi, la c'est moi, j'aurai du le voir ;)
Pour lire l'image, dans la table, j'avais aussi fait ça:

Code : Tout sélectionner

$requete = "SELECT donnees_binaires,type_fichier FROM images_binaires WHERE id=$id"; $resultat = mysql_query($requete); $donnees = @mysql_result($resultat,images_binaires.donnees_binaires); $type = @mysql_result($resultat,0,images_binaires.type_fichier); header( "content-type: $type"); echo $donnees; mysql_close();
(fonction appelée par un html qui affiche bien l'image)
Ah, un peu plus d'infos... Comprend aussi que moins il y a d'infos plus c'est difficile de pouvoir répondre.
Ce que je veux faire, c'est au lieu d'afficher $donnees, faire d'abord le merge avec le logo.
Donc c'est passer le $donnees (et le logo)à la fonction imagecopymerge. C'est ça qui ne fonctionne pas.
Si tu me premts, une chose me gène dans ton/tes scripts c'est le manque de tests.
As-tu bien tous tes retours boolean à true? En particulier la "fameuse" fonction:
imagecopymerge($destination, $source, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 60);
D'autre part, pardonne cette questions débiles mais, as-tu essayé de faire un echo sur tes 2 images
avant de lancer cette fonction? Et as-tu essayé la fusion sur deux images venant directement de ton DD?

J'avoue, humblement, avoir testé le merge sur mon serveur en // de ce post mais pas de problème. En tout cas,
en tentant d'avoir un prob identique au tien (triturage des arguments etc...), et je n'y suis pas arrivé.
(a avoir un blem, j'entends).
Une erreur survient mais avant cette fonction. Soit: après l'appel à ta BD d'ou les echo dont j'ai parlé.
Merci
PS: je poste en anonyme car je n'ai plus mon mot de passe (J'ai demandé une restauration...)
D'acodac ;)

@+ bon code ;) ...pause syndicale je me re-log demain

Mammouth du PHP | 991 Messages

02 août 2009, 01:48

Je suis juste de passage, mais l'utilisation des @ me chiffone , pourquoi masquer des erreurs au lieu de les résoudres ?

Fais des sommes de controle (md5_file() ) pour savoir l'authenticité de ton image et si elle n'est pas corrompu en base de données.

Bye hawk
DevOps, Symfony4, Hoa

Eléphant du PHP | 453 Messages

02 août 2009, 15:34

Hello,
J'aime ce genre de réponse... Tu aides les gens parfois ou tu es un adepte du grand sphinx?
Cette phrase ne s'adressait pas à toi. Je ne voulais pas être désagréable et je ne pense pas l'avoir été, si tel est le cas, je m'en excuse
mais les réponses de Nolem étaient un peu bizarre, non?
=D>

Ah bon, j'ai des réponses bizarres ? J'ai peut être Alzheimer ? 8-|

Règle du forum :
... Utilisez systématiquement les balises
 (pour vos sources PHP) et [code] (pour tout autre forme de code) afin de rendre l'affichage de votre code lisible et compréhensible par tous. ...[/quote]
:lol: une [url=http://forum.phpfrance.com/php-debutant/transformation-une-image-binaire-lue-une-sql-t249214-15.html#p300649]réponse bizarre[/url] 
[quote="bob_morane"]Pour l'intérêt du stockage, ce projet s'intègre déjà dans une utilisation de DB. Je voulais donc garder une certaine cohérence.[/quote]
[quote="bob_morane"]C'est intéressant de stocker les images dans la base de données, si l'on souhaite limiter leur accès à des membres par exemple.
C'est la manière la plus sécurisée de le faire en ouaib.[/quote] 
[php]
$donnees = @mysql_result($resultat,images_binaires.donnees_binaires);
$type = @mysql_result($resultat,0,images_binaires.type_fichier);
bullshit !

Sujet clos pour moi.
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia

Petit nouveau ! | 6 Messages

06 août 2009, 08:01

Je suis juste de passage, mais l'utilisation des @ me chiffone , pourquoi masquer des erreurs au lieu de les résoudres ?

Fais des sommes de controle (md5_file() ) pour savoir l'authenticité de ton image et si elle n'est pas corrompu en base de données.

Bye hawk
>> Oui Hawk, je sais mais il y a un @ que je n'ai pas réussi à retirer. :? Les images extraites sont cependant correctes.

Si tu me premts, une chose me gène dans ton/tes scripts c'est le manque de tests.
As-tu bien tous tes retours boolean à true? En particulier la "fameuse" fonction:
imagecopymerge($destination, $source, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 60);
D'autre part, pardonne cette questions débiles mais, as-tu essayé de faire un echo sur tes 2 images
avant de lancer cette fonction? Et as-tu essayé la fusion sur deux images venant directement de ton DD?

J'avoue, humblement, avoir testé le merge sur mon serveur en // de ce post mais pas de problème. En tout cas,
en tentant d'avoir un prob identique au tien (triturage des arguments etc...), et je n'y suis pas arrivé.
(a avoir un blem, j'entends).
Une erreur survient mais avant cette fonction. Soit: après l'appel à ta BD d'ou les echo dont j'ai parlé.
>> La fonction lecture d'une image de la base + affichage test par un echo, renvoie bien une image.
>> J'ai essayé le merge de deux images stockées sur mon DD avec imagecopymerge, ça fonctionne aussi
>> Le problème est quand j'utilise l'image sortant de la DB (contenue dans $donnée et $type) et que je tente de la merger
avec une image de mon DD. Là, la fonction imagecopymerge ne donne pas le résultat attendu...
Le merge n'affiche rien. Il semble que le $donnees ne soit pas un argument valide pour la fonction imagecopymerge.
le code global serait:
<?php
error_reporting(E_ALL);
#$id=$_GET['id'];
$id=4;
mysql_connect('localhost', 'toto', '');
mysql_select_db("essai");
$requete = "SELECT donnees_binaires,type_fichier FROM images_binaires WHERE id=$id";
$resultat = mysql_query($requete);
$donnees = @mysql_result($resultat,images_binaires.donnees_binaires);
$type = @mysql_result($resultat,0,images_binaires.type_fichier);
mysql_close();

header( "content-type: $type");

$source = imagecreatefromjpeg("logo.jpg");
$destination = $donnees;
// largeur et la hauteur images
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);
$largeur_destination = imagesx($destination);
$hauteur_destination = imagesy($destination);

// Mise en place du logo
$destination_x = $largeur_destination - ($largeur_source+150);
$destination_y =  $hauteur_destination - ($hauteur_source+150);

// On met le logo (source) dans l'image de destination (la photo)
imagecopymerge($destination, $source, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 60);

// On affiche l'image de destination qui a été fusionnée avec le logo
imagejpeg($destination);
# Ou echo $destination


?> 
Je vais recommencer quelques tests... Si vous avez des idées, merci pour votre aide. :D