2009-08-08 8 views
4

Existe-t-il un moyen simple de mettre à l'échelle dynamiquement une image en php?redimensionner dynamiquement des images en php jpg/png/gif

Id aiment utiliser spécifiquement une sorte de fonction où je peux l'insérer dans mon heml tels que

<img src=image.php?img=boss.jpg&width=500> 

et bien sûr, il serait alors redimensionner l'image à quelque hauteur qu'il contraint à 500px de large

J'apprécie toutes les entrées, merci.

EDIT n'a pas besoin d'inclure jpg types de fichiers png et gif

+2

Bouquet de doublons: http: // stackoverflow.com/questions/tagged/resize+php –

Répondre

7

Je préfère WideImage bibliothèque, car il est vraiment très facile à utiliser.

Dans votre cas, tout ce que vous avez à faire est:

$img_path = $_GET['img']; 
$new_width = $_GET['width']; 

$new_img = wiImage::load($img_path)->resize($new_width); 

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

echo $new_img->asString('jpg', 80); 

Et il prend en charge jpeg, png, gif, Gd, ...

+1

WideImage est vraiment sympa. Le redimensionnement de l'image peut devenir assez complexe, en utilisant une bibliothèque testée par la communauté pour cette tâche est A Good Thing ™. :) – deceze

1

Vous pouvez utiliser une bibliothèque GD et de créer un script simple qui dimensionner l'image que vous le souhaitez. Vérifiez le manual

1

Enregistrez cela sous image.php, cela devrait fonctionner comme vous le souhaitez.

<?php 

if (array_key_exists('img', $_GET) === true) 
{ 
    if (is_file($_GET['img']) === true) 
    { 
     $scale = array(); 

     $scale[] = (array_key_exists('width', $_GET) === true) ? $_GET['width'] : null; 
     $scale[] = (array_key_exists('height', $_GET) === true) ? $_GET['height'] : null; 

     Image($_GET['img'], implode('*', $scale)); 
    } 
} 

function Image($image, $scale = null) 
{ 
    $type = image_type_to_extension(@exif_imagetype($image), false); 

    if (function_exists('ImageCreateFrom' . $type) === true) 
    { 
     $image = call_user_func('ImageCreateFrom' . $type, $image); 

     if (is_resource($image) === true) 
     { 
      $size = array(ImageSX($image), ImageSY($image)); 

      if (isset($scale) === true) 
      { 
       $scale = array_filter(explode('*', $scale), 'is_numeric'); 

       if (count($scale) >= 1) 
       { 
        if (empty($scale[0]) === true) 
        { 
         $scale[0] = $scale[1] * $size[0]/$size[1]; 
        } 

        else if (empty($scale[1]) === true) 
        { 
         $scale[1] = $scale[0] * $size[1]/$size[0]; 
        } 
       } 

       else 
       { 
        $scale = array($size[0], $size[1]); 
       } 
      } 

      else 
      { 
       $scale = array($size[0], $size[1]); 
      } 

      $result = ImageCreateTrueColor($scale[0], $scale[1]); 

      if (is_resource($result) === true) 
      { 
       ImageCopyResampled($result, $image, 0, 0, 0, 0, $scale[0], $scale[1], $size[0], $size[1]); 

       if (headers_sent() === false) 
       { 
        header('Content-Type: image/' . $type); 

        if ($type == 'gif') 
        { 
         return ImageGIF($result, null); 
        } 

        else if ($type == 'png') 
        { 
         return ImagePNG($result, null, 9); 
        } 

        else if ($type == 'jpeg') 
        { 
         return ImageJPEG($result, null, 90); 
        } 
       } 
      } 
     } 
    } 

    return false; 
} 

?> 
2

pas testé

$file = $_GET('img'); 
$wid = $_GET('width'); 

// better ways to do this, but this works in a pinch 
$orig = @imagecreatefromjpeg($file); 
if ($orig === FALSE) $orig = @imagecreatefromgif($file); 
if ($orig === FALSE) $orig = @imagecreatefrompng($file); 
if ($orig === FALSE) exit("can't continue; $file is unreadable\n"); 

// aspect ratio stuff 
$sx = imagesx($orig); 
$sy = imagesy($orig); 
$hyt = round($wid * $sy/$sx); 

$img = imagecreatetruecolor($wid, $hyt); 
imagecopyresampled($img, $orig, 0, 0, 0, 0, $wid, $hyt, $sx, $sy); 
header('Content-type: image/jpeg'); 
imagejpeg($img); 
-3
*<form method="post" enctype="multipart/form-data"> 
<textarea name="base"></textarea> 
<input type="submit" name="submit" value="submit" /> 
</form>* 
<?php 

function genRandomPassword() 
{ 
    $length = 8;  
    $characters = '12346789abcdefghjkmnpqrstuvwxyABCDEFGHJKLMNPQRSTUVWXYZ'; 
    $string = ''; 
    for ($p = 0; $p < $length; $p++) 
    { 
     $string .= @$characters[@mt_rand(0, @strlen($characters))]; 
    } 
    return $string; 
} 

if($_SERVER["REQUEST_METHOD"] == "POST") 
{ 
     $name=genRandomPassword(); 

$imageDataEncoded = $_POST['base']; 
$imageData = base64_decode($imageDataEncoded); 
$source = imagecreatefromstring($imageData); 
$angle = 180; 
$rotate = imagerotate($source, $angle, 0); // if want to rotate the image 
$imageName = $name.".jpg"; 
$imageSave = imagejpeg($rotate,'images/'.$imageName,100); 

    /* 
    time line image 720*406/480*271/320*181 
    user pic 90*90/110*110/250*250 
    */ 

    list($width,$height)=getimagesize('images/'.$imageName); 

    $newwidth=480; $newheight=271; 




//$newheight=($height/$width)*$newwidth; 
$tmp=imagecreatetruecolor($newwidth,$newheight); 

imagecopyresampled($tmp,$source,0,0,0,0,$newwidth,$newheight, 
    $width,$height); 

    $filename = "images/". $imageName; 

    imagejpeg($tmp,$filename,100); 

    imagedestroy($source); 
    imagedestroy($tmp); 
} 
?> 
Questions connexes