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

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 : Transformation d'une image binaire lue d'une DB SQL

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

par bobmorane » 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

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

par niuxe » 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.

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

par thehawk » 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

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

par FuZZyLine » 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

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

par bob_morane » 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...)

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

par FuZZyLine » 01 août 2009, 10:00

Salut,
Bonjour,
le code suivant permet de fusionner deux images en une seule.
(Un logo mergé avec une image lambda)
Il fonctionne bien avec deux fichiers présents sur mon disque.
[...]
D'autre part, j'ai une base de donnée qui contient des images en binaire.
Ce que j'aimerai faire, c'est que pour chaque image lue dans la DB, un merge d'un logo soit effectué avant de
transmettre l'image à une page html. (utilisation du 1er programme)
La lecture de la DB se fait de manière suivante:
[...]
Je récupère l'image dans la variable $image et son type dans $type.
J'arrive à afficher l'image ou a la sauver sur mon DD mais je voudrais directement la transmettre
à la routine de merge (1er programme)
Donc en fait remplacer le $destination = imagecreatefromjpeg("img_tmp.jpg"); par quelque chose du genre
$destination="mon image lue dans la DB"
J'ai essayé une affectation simple du genre $destination=$image mais ça ne fonctionne pas (un message du genre ressource incorrecte...)
Quelqu'un aurait-il une solution?
Merci.
On reprend *tout* depuis le début (méprise en moins)

1) Tu arrive, à afficher l'image (brut) provenant de ta DB dans une page html ? : OUI
2) Tes 2 images (la brut) & celle servant de merge sont de même type ? : IL SEMBLE
3) Ton script, sus-mentionner, faisant le merge est ainsi ou dans une fonction ? : ?

Dans ta fonction MySql tu mets:
$type = @mysql_result($resultat,0,images_binaires.type_fichier);
Mais $type n'est pas indiqué lors du merge, normal? Et surtout le $type correspond au type
d'image (.jpg .png, ...) ou type de fichier? Que te retourne cette variable? D'autre part
un truc me chifonne, ne manque t'il pas underscore entre binaires ET type ?

Si ton script est dans une fonction le résultat de l'image est retourné ou ne fait que modifier
la variable $destination à l'interieur de la fonction?
<?php
bool  imagecopymerge ( resource   dst_im , resource   src_im , int   dst_x , int   dst_y , int   src_x , int   src_y , int   src_w , int   src_h , int   pct ) 
?>
Que donne la valeur boolean du retour? Au vu de ce que tu as dis il vaut TRUE mais bon...

--- Maintenant la phase la plus charmante
J'aime ce genre de réponse... Tu aides les gens parfois ou tu es un adepte du grand sphinx?
Laisse tomber et merci quand même.
Tu poses une question, on essaie d'y répondre. Que la réponse soit celle attendue ou pas
il est inutile d'être désagréable. On est pas payé pour suivre un topic... Sinon ca se saurait.

@+ bon code, bon we les gens ;)

par Invité » 31 juil. 2009, 18:46

C'est mon choix 8-)

par niuxe » 31 juil. 2009, 18:39

Pourquoi ? (????)

par Invité » 31 juil. 2009, 18:37

Non, pas de fichier temporaire non plus :wink:

par niuxe » 31 juil. 2009, 18:34

Encore une fois, je ne veux pas utiliser de fichier...
Même les fichiers temporaires ?

par Invité » 31 juil. 2009, 18:28

:shock:
Encore une fois, je ne veux pas utiliser de fichier...
J'aime ce genre de réponse... Tu aides les gens parfois ou tu es un adepte du grand sphinx?
Laisse tomber et merci quand même.

par niuxe » 31 juil. 2009, 18:21

...
Ce que je veux faire c'est merger SOURCE_jpg avec LOGO.jpg mais sans passer par une sauvegarde de SOURCE_jpg dans un répertoire.
Suis-je plus clair?
unlink() et mkdir() si besoin. ;)
...
D'autre part, je pense que c'est aussi la meilleure façon d'éviter que des petits malins te vident un répertoire (ou pointent dessus) pour utiliser ton travail ailleurs.
mauvaise argumentation et c'est faux. Toutes images sur le net peut être reprises et même en grande quantité (un aspirateur de site en exemple)
...Pour glouglou? heu... désolé c'est pour moi du chinois :-)
Google ;)

par Invité » 31 juil. 2009, 17:38

Excuse moi, mais je ne comprends pas ce que tu veux dire... :?
As tu regardé la signature de imagejpeg() ? Que font les arguments optionnels ?
*traitement_logo.php
$chemin = "images_php/"
$logo = "logo_fin.jpeg";
$chemin_logo = $chemin.$logo;

$donnee_image = (file_exist($chemin_logo))? fread(fopen($chemin_logo,"rb"),filesize($chemin_logo)): "Erreur de traitement";
//etc.
* code faite de tête.
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.
Au passage, pourquoi stocker les images dans une SGBDR ? Quel est l'intérêt et l'inconvénient ? (...)
Si tu ne peux pas répondre par toi même à ces questions, je t'invite à faire une recherche via ton ami glouglou.
@Nolem
Je me suis sans soute mal exprimé, je ne cherche pas à "merger" deux fichiers jpeg présents dans un répertoire. (Ca je sais faire) Pas plus lire un jpeg de ma db, le sauver dans un repertoire sous forme de jpeg puis le merger à un autre fichier. (Ce qui revient au cas précédent)

Je veux lire un jpeg de ma db, appelons le SOURCE_jpg et le merger à un autre fichier, LOGO.jpg qui lui, se trouve bien dans un répertoire. Ce que je veux faire c'est merger SOURCE_jpg avec LOGO.jpg mais sans passer par une sauvegarde de SOURCE_jpg dans un répertoire.
Suis-je plus clair?
Quand à la réponse à tes questions, je pense avoir donné la réponse. Les images sont déjà dans une DB existante (utilisée dans une autre appli). D'autre part, je pense que c'est aussi la meilleure façon d'éviter que des petits malins te vident un répertoire (ou pointent dessus) pour utiliser ton travail ailleurs.
Ils pourront toujours copier les photos à la main, une par une, avec un print d'écran et je leur souhaite alors beaucoup de patience... :-)
Pour glouglou? heu... désolé c'est pour moi du chinois :-)

@FuZZyLine -> Merci. J'avais vu cette page ;-)

par niuxe » 31 juil. 2009, 17:18

...C'est la manière la plus sécurisée de le faire en ouaib.
Je suis mitigé sur cette réponse. :/
ht_access :-*

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

par FuZZyLine » 31 juil. 2009, 17:06

Bonjour,
le code suivant permet de fusionner deux images en une seule. (Un logo mergé avec une image lambda)
Il fonctionne bien avec deux fichiers présents sur mon disque.
<?php
header ("Content-type: image/jpeg");
$source = imagecreatefromjpeg("logo.jpg");
$destination = imagecreatefromjpeg("img_tmp.jpg");
// largeur et hauteur images
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);
$largeur_destination = imagesx($destination);
$hauteur_destination = imagesy($destination);

// coordonnées du logo dans l'image
$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);

?>
D'autre part, j'ai une base de donnée qui contient des images en binaire[*].
Ce que j'aimerai faire, c'est que pour chaque image lue dans la DB, un merge d'un logo soit effectué avant de transmettre l'image à une page html. (utilisation du 1er programme)
La lecture de la DB se fait de manière suivante:
<?php
$id=$_GET['id'];
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_fetch_array($resultat);
$type = @mysql_result($resultat,0,images_binaires.type_fichier);
$image=$donnees[0];
......
Je récupère l'image dans la variable $image et son type dans $type.
J'arrive à afficher l'image ou a la sauver sur mon DD mais je voudrais directement la transmettre
à la routine de merge (1er programme)
Donc en fait remplacer le $destination = imagecreatefromjpeg("img_tmp.jpg"); par quelque chose du genre $destination="mon image lue dans la DB"
J'ai essayé une affectation simple du genre $destination=$image mais ça ne fonctionne pas (un message du genre ressource incorrecte...)
Quelqu'un aurait-il une solution?
Merci.
Desolé pas de solution directe mais un lien ou "justement" est mentionné la fusion d'images:
http://www.siteduzero.com/tutoriel-3-14 ... #ss_part_5

D'accord avec Nolem pour ce qui est du stockage d'img en DB.
Faire pointer une variable de la DB vers l'image est, me semble t'il, mieux adapter.
Pour la sécurité suffit de mettre un .htaccess dans le répertoire images et voila.

@+ les gens

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]