2012-01-23 4 views
1

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

(!) Fatal error: Class 'Imagick' not found in C:\wamp\www\Legendary\new\usersettings.php on line 725 
Call Stack 
# Time Memory Function Location 
1 0.0042 880616 {main}() ..\usersettings.php:0 

Вот мой текущий код (включая код, который не работал):

echo ' 
        <table border="0" width="100%"> 
        <tr><td style="font-size: 16px;">Change Image</td></tr> 

        <form action="" method="post" enctype="multipart/form-data"> 
         <tr><td>Upload Image:</td><td style="text-align: right;"><input type="file" name="upimage" id="upimage" /></td></tr> 
         <tr><td></td><td style="text-align: right; font-size: 10px;"></td></tr> 
         <tr><td></td><td style="text-align: right;"><input type="submit" name="submitnewimage" value="Upload" class="button" /></td></tr> 
        </form> 
        '; 

        echo ' 
        </table> 
        '; 

        if(isset($_POST['submitnewimage'])){ 
         $name = $_FILES['upimage']['name']; 
         $temp = $_FILES['upimage']['tmp_name']; 
         $type = $_FILES['upimage']['type']; 
         $size = $_FILES['upimage']['size']; 
         if($name!=""){ 
          include 'config.php'; 
          $sql5 = mysql_query("SELECT * FROM images ORDER BY id DESC LIMIT 1"); 
          while($row=mysql_fetch_array($sql5)) { 
           if(!isset($show2)){ 
            $id = $row['id']; 
            $id = $id + 1; 

            $show2 = "YES"; 
           } 
          } 

          if(($type=="image/jpeg") || ($type=="image/jpg") || ($type=="image/gif") || ($type=="image/pjpeg") || ($type=="image/png")){ 
           if($size<=100000){ 
            $pos = strrpos($name, '.'); 
            if($pos === false) 
             $ext = ""; 
            $ext = substr($name, $pos); 
            $newFilename = $id.$ext; 

            move_uploaded_file($temp, "images/teamicons/".$newFilename); 
            $im = new Imagick('images/teamicons/'.$newFilename); 
            $im->thumbnailImage(75,75); 
            $im->writeImage('images/teamicons/'.$newFilename); 

            mysql_query("INSERT INTO `images`(`id`, `name`, `size`, `type`) VALUES (NULL,'$newFilename',$size,'$type')"); 
            $myusername = $_SESSION['myusername']; 
            mysql_query("UPDATE `members` SET `img`= '$newFilename' WHERE `username`='$myusername'"); 

            header("Location:" . $_SESSION['prev_page']); 
           }else{echo "<tr><td colspan='2'><span style='color:#F00;'>The file, &quot;".$name."&quot;, is too large! Maximum allowed file size is 100kB.</span></td></tr>";} 
          }else{echo "<tr><td colspan='2'><span style='color:#F00;'>&quot;".$type."&quot; is not a valid file type!</span></td></tr>";} 
         }else{echo "<tr><td colspan='2'><span style='color:#F00;'>No file has been specified!</span></td></tr>";} 
        } 

есть ли способ изменить ширину и высоту изображения?

ответ

5

Я успешно использовал GD, чтобы сделать это недавно, в частности, используя функцию imagecopyresampled.


Чтобы немного расширить на этом ... После того как я имел изображение закачано (который я не буду вдаваться в, потому что это совершенно другой вопрос), я сделал что-то довольно простое, как это:

$original_info = getimagesize($filename); 
$original_w = $original_info[0]; 
$original_h = $original_info[1]; 
$original_img = imagecreatefromjpg($filename); 
$thumb_w = 100; 
$thumb_h = 100; 
$thumb_img = imagecreatetruecolor($thumb_w, $thumb_h); 
imagecopyresampled($thumb_img, $original_img, 
        0, 0, 
        0, 0, 
        $thumb_w, $thumb_h, 
        $original_w, $original_h); 
imagejpeg($thumb_img, $thumb_filename); 
imagedestroy($thumb_img); 
imagedestroy($original_img); 

Обратите внимание, что я не тестировал этот код. Это просто для того, чтобы дать вам базовое представление о моем методе.

+0

в imagecopyresampled не dst_w и dst_h приходят до src_w и src_h? у вас их есть. – dewd

+0

@dewd Да, вы правы, я отредактирую свой ответ. Благодаря! –

+1

строка # 4: imagecreatefromjpg должно быть imagecreatefromjpeg не так ли? для тех, кто попытается использовать скрипт – Rossitten

1

Класс Imagick не найден, поскольку это расширение PHP, которое необходимо установить на ваш сервер.

Прочтите следующую документацию, чтобы узнать, как использовать/установить расширение. http://www.php.net/manual/en/book.imagick.php

+0

Кажется, что ссылка для скачивания ушла ... Знаете ли вы, как это сделать? – ZyteX

+0

Я попробую! Благодаря! – ZyteX

+0

Вы можете использовать расширение GD http://be2.php.net/manual/en/book.image.php – dimitril

0

Я использую такой код:

$t = imagecreatefromjpeg($old_path); 
$x = imagesx($t); 
$y = imagesy($t); 

$s = imagecreatetruecolor($new_width, $new_height); 

imagecopyresampled($s, $t, 0, 0, 0, 0, $new_width, $new_height, 
     $x, $y); 

imagejpeg($s, $new_path); 
chmod($new_path, 0644); 
0

Вы также можете масштабировать изображение на стороне клиента, например, используя plupload library (может изменять размер JPEG и PNG).

Смежные вопросы