2016-12-11 2 views
0

J'ai essayé de redimensionner chaque image de la base de données avant de la pousser dans un tableau. Le tableau contient le chemin de l'image (URL) où je voudrais afficher l'image de redimensionnement sur une grille car les images originales sont trop grandes et prennent trop de temps à charger, d'où le redimensionnement. J'ai compris la logique et je ne pouvais toujours pas la résoudre. Quelqu'un pourrait-il m'aider avec ça? Ma base de données contient les colonnes 'photo' et 'emplacement'.Imagick PHP (Comment redimensionner chaque image de la base de données?)

getphoto.php

<?php 

require_once('dbConnect.php'); 

$sql = "select * from volleyupload1"; 
$res = mysqli_query($con, $sql); 

$result = array(); 

while ($row = mysqli_fetch_array($res)) { 
    foreach ($result as $row['photo']) { 
     $imagick = new Imagick($row['photo']); 
     $imagick->thumbnailImage(300, 300, true, true); 
     header("Content-Type: image/jpg"); 
// echo $imagick; 
    } 
    array_push($result, array('url' => $row['photo'], 'location' => $row['location'])); 
//  $test = $row['photo']; 
// foreach ($result as $row['photo']){ 
//  $imagick = new Imagick($row['photo']); 
// $imagick->thumbnailImage(300, 300, true, true); 
// header("Content-Type: image/jpg"); 
//  echo $imagick; 
// 
//  } 
} 


echo json_encode(array("result" => $result)); 

mysqli_close($con); 

Répondre

0

Je ne comprends pas la différence entre 'photo' et 'emplacement'. Pour le navigateur, vous ne devez envoyer que des URL et non des chemins de fichiers locaux.

Quoi qu'il en soit, vous devez stocker l'image miniature dans un nouveau fichier, puis renvoyer l'URL à ce fichier au lieu de l'original.

pourrait ressembler à ceci:

while ($row = mysqli_fetch_array($res)) { 
    $imagick = new Imagick($row['photo']); 
    $imagick->thumbnailImage(300, 300, true, true); 

    $thumb_path = $row['photo'] . '.thumb.jpg'; 
    $thumb = fopen($thumb_path, 'w'); //open new filehandle to write the thumb 
    $imagick->writeImageFile($thumb); 
    fclose($thumb); 

    array_push($result, array('url' => $thumb_path, 'location' => $row['location'])); 

} 

$ thumb_path doit être un chemin de fichier local. Au navigateur, vous devez envoyer une URL accessible depuis Internet.

+0

'photo' contient des URL alors que 'location' est simplement un nom de l'emplacement. Parce que je suis capable d'afficher toutes les URL dans le tableau, donc j'essayais de redimensionner l'image à partir des URL. J'ai essayé le code ci-dessus et j'ai reçu quelques erreurs cependant. – arsenallavigne

+0

Vous devez au moins ajuster les valeurs de chemin utilisées car je ne sais pas ce qu'elles contiennent. Déboguer un peu et poster des erreurs utiles de vous coincer à nouveau – Iarwa1n