изменить размер изображения с php? - PullRequest
0 голосов
/ 26 сентября 2011

Я провел свое исследование в сети, а также здесь, и я продолжаю придумывать ответ, который не может мне помочь: у меня есть следующий код, который отображает изображение из папки в зависимости от местоположения пользователя, однако изображение слишкомбольшой, и мне нужно изменить его размер.все сценарии, которые я пробовал или читал, относятся к загружаемым файлам.Кто-нибудь может подтолкнуть меня в правильном направлении?

спасибо.

 <?php


        print"  

        <table  <td width=\"138\" height=\"73\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
      <tr>
        <td align=\"center\" valign=\"middle\"><a href=\"map.php\"><img src=\"" .
         esc('img/' . $db_name . '_maps/sm' . $user['location'] . '.png') .
         "\" alt=\"Map of systems around {$user['location']}\" /></a></td>
      </tr>
    </table>
         "
    ?>

Моя проблема возникает из-за того, что мне нужно вытащить изображения как:

<img src=\"" .esc('img/' . $db_name . '_maps/sm' . $user['location'] . '.png') . "\" alt=\"Map of systems around {$user['location']}\" /></a>

Ответы [ 4 ]

2 голосов
/ 26 сентября 2011

Написал учебник об этом некоторое время назад.Возможно, это может помочь.Он начинается с загрузки, но в основном это изменение размера.Просто измените использование массива $ _FILES, указав тип изображения и имя файла другим способом.Вот код, который вам нужен:

// Create image from file
switch(strtolower($_FILES['image']['type']))
{
     case 'image/jpeg':
         $image = imagecreatefromjpeg($_FILES['image']['tmp_name']);
         break;
     case 'image/png':
         $image = imagecreatefrompng($_FILES['image']['tmp_name']);
         break;
     case 'image/gif':
         $image = imagecreatefromgif($_FILES['image']['tmp_name']);
         break;
     default:
         exit('Unsupported type: '.$_FILES['image']['type']);
}

// Target dimensions
$max_width = 240;
$max_height = 180;

// Get current dimensions
$old_width  = imagesx($image);
$old_height = imagesy($image);

// Calculate the scaling we need to do to fit the image inside our frame
$scale      = min($max_width/$old_width, $max_height/$old_height);

// Get the new dimensions
$new_width  = ceil($scale*$old_width);
$new_height = ceil($scale*$old_height);

// Create new empty image
$new = imagecreatetruecolor($new_width, $new_height);

// Resize old image into new
imagecopyresampled($new, $image, 
     0, 0, 0, 0, 
     $new_width, $new_height, $old_width, $old_height);

// Catch the imagedata
ob_start();
imagejpeg($new, NULL, 90);
$data = ob_get_clean();

// Destroy resources
imagedestroy($image);
imagedestroy($new);

// Set new content-type and status code
header("Content-type: image/jpeg", true, 200);

// Output data
echo $data;

Если вы хотите сохранить изображение в виде файла, а не выгружать его в браузер, удалите заголовок и часть эха в конце, а затем поменяйте NULL параметр в вызове imagejpeg с фактическим именем файла.Надеюсь, это поможет:)

Вот код, который используется: http://samples.geekality.net/image-resize/

1 голос
/ 31 июля 2012

Есть простая в использовании библиотека с открытым исходным кодом, которая называется PHP Image Magician , которая имеет некоторые приятные функции и документацию.

Она использует 100% GD.

ПримерОсновное использование:

$magicianObj = new imageLib('racecar.jpg');
$magicianObj -> resizeImage(100, 200, 'crop');
$magicianObj -> saveImage('racecar_small.png');
1 голос
/ 26 сентября 2011

Вы посмотрите на gd: http://www.php.net/manual/en/function.imagecopyresized.php

Вы можете попробовать это:

$extension = substr( $img_url, -3 );
$extension = strtolower($extension);
switch ($extension) {
case "jpg":
case "jpeg":
$src_im = createimagefromjpeg($img_url);
break;
case "gif":
$src_im = createimagefromgif($img_url);
break;
case "png":
$src_im = createimagefrompng($img_url);
break;
}
// Get size
$size = GetImageSize($img_url);
$src_w = $size[0];
$src_h = $size[1];

// $width has to be fixed to your wanted width
$dst_w = $width;
$dst_h = round(($dst_w / $src_w) * $src_h);
$dst_im = ImageCreateTrueColor($dst_w, $dst_h);
ImageCopyResampled($dst_im, $src_im, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h);
ImageJpeg($dst_im);
ImageDestroy($dst_im);
imageDestroy($src_im);
0 голосов
/ 26 сентября 2011

Если вам нужно больше возможностей, может помочь .

...