2010-05-30 19 views
0

Hey encore ... à ceux qui ont pu lire ma question précédente qui a été résolue il y a quelques minutes>. Le script php à la volée fonctionne parfaitement, mais quand je suis allé télécharger de nouvelles images dans une galerie que j'ai faite moi-même, les images sont redimensionnées à 150 x 150 pour ce que je voulais ... cependant, quand il s'agit de nouvelles images sont ajoutées, il est tout noir ...Problème avec les vignettes après nouvellement ajouté - Méthode PHP à la volée

alt text http://i48.tinypic.com/2qth175.png

Comme vous pouvez voir les trois images noires qui ont été téléchargés dans le dossier et le répertoire ajouté à la base de données.

Les autres (images non-noires) sont déjà redimensionnées avec image.php.

À quoi est-ce dû?

Si je considère la source, le code est bien ... la boucle while dans le PHP génère une sortie comme ceci:

<div class="view-wrap" id="photo-10"> 
    <div class="view-icon"> 
     <div class="img-label"> 
      <a href="#" id="10" class="delete"><img src="img/small-delete.png" /> Delete</a> 
     </div> 

     <a href="img/events/Paintballing/24251_1395408043148_1170626626_1204038_5382765_n.jpg"> 
      <img src="image.php?dir=img/events/Paintballing/24251_1395408043148_1170626626_1204038_5382765_n.jpg" alt="" width="110" height="110" /> 
     </a> 
    </div> 
</div> 

Un exemple d'un bloc.

Si je considère la source (dans Firefox) et cliquez sur le image.php? Dir = img/événements/Paintballing/24251_1395408043148_1170626626_1204038_5382765_n.jpg par exmaple, je peux voir la vignette à son 150 x 150 taille mais dans la mise en page , il montre une vignette noire ...

Est-ce que quelqu'un sait pourquoi cela se produit?

EDIT:

<?php 

$dir = $_GET['dir']; 

header('Content-type: image/jpeg'); 

$create = imagecreatetruecolor(150, 150); 

$img = imagecreatefromjpeg($dir); 

list($width, $height) = getimagesize($dir); 

imagecopyresampled($create, $img, 0, 0, 0, 0, 150, 150, $width, $height); 

imagejpeg($create, null, 100); 

?> 

C'est image.php.

+0

Mettre à jour mon message! – RobertPitt

Répondre

0

Merci de bien vouloir mettre à jour votre article.

Etes-vous sûr que l'image est un jpg/jpeg que votre téléchargement.

Essayez de changer les éléments suivants

<?php 

$dir = $_GET['dir']; 
$ext = strtoupper(pathinfo($dir, PATHINFO_EXTENSION)); 
switch($ext) 
{ 
    case 'jpeg': 
    case 'jpg': 
     $img = imagecreatefromjpeg($dir); 
    break; 
    case 'png': 
     $img = imagecreatefrompng($dir); 
    break; 
    case 'gif': 
     $img = imagecreatefromgif($dir); 
    break; 
} 
if(isset(img)) 
{ 
    header('Content-type: image/jpeg'); 
    $create = imagecreatetruecolor(150, 150); 
    list($width, $height) = getimagesize($dir); 
    imagecopyresampled($create, $img, 0, 0, 0, 0, 150, 150, $width, $height); 
    imagejpeg($create, null, 100); 
}else 
{ 
    echo sprintf('Unable to process image, Unknown format %s',$ext); 
} 
?> 
+0

A édité le message – MacMac

+0

Cela a-t-il fonctionné pour vous alors? – RobertPitt

0

Plutôt que d'étirer les images pourquoi ne pas ajouter une bordure?

est ici la fonction

function resize_to_canvas($filename,$canvas_w=100,$canvas_h=225){ 
list($width, $height, $type) = getimagesize($filename); 

$original_overcanvas_w = $width/$canvas_w; 
$original_overcanvas_h = $height/$canvas_h; 

$dst_w = round($width/max($original_overcanvas_w,$original_overcanvas_h),0); 
$dst_h = round($height/max($original_overcanvas_w,$original_overcanvas_h),0); 

$dst_image = imagecreatetruecolor($canvas_w, $canvas_h); 
$background = imagecolorallocate($dst_image, 255, 255, 255); 
imagefill($dst_image, 0, 0, $background); 

$src_image = imagecreatefromjpeg($filename); 
imagecopyresampled($dst_image, $src_image, ($canvas_w-$dst_w)/2, ($canvas_h-$dst_h)/2, 0, 0, $dst_w, $dst_h, $width, $height); 
imagegif($dst_image, $filename); 
imagedestroy($dst_image);} 

Cette fonction remplacera le fichier d'origine, mais est facilement modifié pour créer une nouvelle image miniature. Il suffit de changer le nom du fichier la ligne imagegif ($ dst_image, $ filename);