website logo
Auteur
avatar
jpb

Forum » » Road map développement » » [Résolu] - publication d'image format src data:image


Posté : 17-12-2019 09:03 icone du post

Résumé : la publication des images au format src=data:image base 64 depuis un portable est non fonctionnelle
cause :
- on avait le manque d'espace dans les champs de la bd <== ils ont été augmentés
- la fonction removehack (fait bien sont boulot) et transforme base 64 et toutes autres occurences dangereuses dans la chaîne de caractères de l'attribut src avant l'entrée dans les tables....

Donc dans l'état aucune chance que cela fonctionne (pas de décodage dans le navigateur et génération d'erreur multiple....)

étant donné que l'on ne peut pas se permettre de supprimer le contrôle de removehack il ne reste donc bien plus que la solution de transformer le data:image en .... url .....
l'idée c'est donc de convertir ces ressources en image avec lien ext avant qu'elle soit introduite dans nos tables qui ne sont pas faite pour cela

- voilà un bout de code qui devrait faire l'affaire... fonctionne avec ou sans tiny ...
implémenté pour l'instant dans mainfile.php mais il faut donc appliquer la fonction partout ou l'on peut introduire des données ...

je pense donc monter la fonction dans le mainfile....pour qu'elle soit dispo de partout


#autodoc dataimagetofile!!!!url(!!!!$base_64_string, $output_path) : Analyse la chaine $base_64_string pour touver "src data:image" SI oui : fabrication de fichiers (gif | png | jpeg) (avec $output_path) et remplacement de "src data:image" par "src url" et retourne $base_64_string modifié ou pas
function dataimagetofile!!!!url(!!!!$base_64_string, $output_path) {
$rechdataimage = '#src=\\\"(data:image/[^"]+)\\\"#m';
preg_match_all($rechdataimage, $base_64_string, $dataimages);
$j=0;
foreach($dataimages[1] as $imagedata) {
$datatodecode = explode(',',$imagedata);
$bin = base_64_decode($datatodecode[1]);
$im = imageCreateFromString($bin);
if (!$im)
die('Image non valide');
$size = getImageSizeFromString($bin);
$ext = substr($size['mime'], 6);
if (!in_array($ext, ['png', 'gif', 'jpeg']))
die('Image non supportée');
$output_file = $output_path."_".$j."_".time().".".$ext;
$base_64_string = preg_replace($rechdataimage, 'src="'.$output_file.'"', $base_64_string,1);
$args = [$im, $output_file];
if ($ext == 'png')
$args[] = 0;
else if ($ext == 'jpeg')
$args[] = 100;
$fonc = "image{$ext}";
call_user_func_array($fonc, $args);
$j++;
}
return $base_64_string;
}


et donc par exemple : l'utilisation dans submit.php
  

$story = dataimagetofile!!!!url(!!!!$story,'modules/upload/upload/artin');
$bodytext = dataimagetofile!!!!url(!!!!$bodytext,'modules/upload/upload/artco'');


Nb : IOS > 11 et le format heic ...
- ( il existe une option qui permet de choisir le format le plus compatible(jpg) et donc de résoudre le problème que l'on aura avec ce format ...)
- si vous ne voulez pas modifier le format des images prises par votre appareil photo alors il existe une astuce envoyer vous la les photo(s) par mail (qui va faire le conversion heic>jpg) récupérer dans votre phototèque et utiliser dans votre publication...

https://labo.infocapagde.com/viewtopic.php?topic=1316&forum=18
et d'autres
L'eau goutte à  goutte finit toujours par percer la pierre...
Message édité par : jpb / 17-12-2019 09:05
 Message édité par : jpb / 17-12-2019 09:09
 Message édité par : jpb / 25-05-2021 09:05
 Message édité par : jpb / 26-05-2021 11:51
 Message édité par : jpb / 27-05-2021 15:51
 Message édité par : jpb / 27-05-2021 16:12
 Message édité par : jpb / 27-05-2021 18:31
 Message édité par : jpb / 27-05-2021 21:06
 Message édité par : jpb / 27-05-2021 21:08
 Message édité par : jpb / 28-05-2021 09:08
 Message édité par : jpb / 28-05-2021 13:02
 Message édité par : jpb / 28-05-2021 17:26
 Message édité par : jpb / 29-05-2021 13:23
 Message édité par : jpb / 29-05-2021 13:25
 Message édité par : jpb / 29-05-2021 13:25
 Message édité par : jpb / 08-01-2022 18:31

Cet article provient de Labo JPB-PHR 2015-2024
https://labo.infocapagde.com/viewtopic.php?topic=1317&forum=21