2017-01-18 2 views
2

C'est le code que j'utilise pour générer l'image base64. il fonctionne parfaitement sur l'hôte local, mais génère une sortie différente sur un hôte distant.La méthode base64_encode() utilisée sur une image GD (imagecreatefrompng) sort différemment sur l'hôte local et l'hôte distant

<?php 
 
//Your Image 
 
$imgSrc = "http://pngimg.com/upload/water_PNG3290.png"; 
 
//getting the image dimensions 
 

 
list($width, $height) = getimagesize($imgSrc); 
 
$dif = $width - $height; 
 
//saving the image into memory (for manipulation with GD Library) 
 
$myImage = imagecreatefrompng($imgSrc); 
 
imageAlphaBlending($myImage, true); 
 
// calculating the part of the image to use for thumbnail 
 
if ($width > $height) { 
 
    $y = $width/13; //width 
 
    $x =$width/2.8 ; //height 
 
    $smallestSide = ($width - $height) /(0.002 * $dif); 
 
} else { 
 
    $x = 0; 
 
    $y = ($height - $width); 
 
    $smallestSide = $width; 
 
} 
 
// copying the part into thumbnail 
 
$thumbSize = 381; 
 
$thumb = imagecreatetruecolor($thumbSize, $thumbSize); 
 
imagefill($thumb,0,0,0x7fff0000); 
 
imagecopyresampled($thumb, $myImage, 0, 0, $x, $y, $thumbSize, $thumbSize, $smallestSide, $smallestSide); 
 
imagealphablending($thumb, false); 
 
imagesavealpha($thumb, true); 
 
//final output 
 
ob_start(); 
 
    imagepng ($thumb); 
 
    $image_data = ob_get_contents(); 
 
ob_end_clean(); 
 
$image_data_base64 = base64_encode ($image_data); 
 
echo "<img src='data:image;base64,".$image_data_base64."'/>"; 
 
?>

Répondre

0

Ceci est juste une supposition, et je peux me tromper, mais peut-être le problème est différent des versions de PHP et/ou des en-têtes de l'image.

Le format PNG et d'autres formats graphiques sont assez complex. Les images affichées à l'identique peuvent être différentes en interne. Par exemple, PNG peut contenir une date de création ou de modification et peut affecter la sortie binaire de l'image.

Le résultat dépend également de la mise en œuvre réelle du format qui varie avec le temps. N'importe quelle fonction GD que vous utilisez pour la manipulation d'image peut changer quelque chose et les résultats seront différents, même si visuellement ils restent identiques.

En général, n'essayez pas de comparer des images en tant que chaînes binaires, cette opération n'est pas fiable.