Изменить размер изображения - PHP - PullRequest
1 голос
/ 24 января 2012

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

( ! ) 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 ]

6 голосов
/ 24 января 2012

Я недавно успешно использовал 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);

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

1 голос
/ 24 января 2012

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

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

0 голосов
/ 14 февраля 2019

Простые решения несколько раз меняли альфа (прозрачный png).Для меня разветвляется только это (это реально, просто скопированный код)

public static function resize($filename, $maxW, $maxH, $ext = null)
{
    if ($ext === null)
        $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
    else
        $ext = strtolower($ext);

    list($origW, $origH) = getimagesize($filename);

    $w = $origW;
    $h = $origH;

    # taller
    if ($h > $maxH) {
        $w = ($maxH / $h) * $w;
        $h = $maxH;
    }

    # wider
    if ($w > $maxW) {
        $h = ($maxW / $w) * $h;
        $w = $maxW;
    }


    $resource = imagecreatetruecolor($w, $h);
    # MUST IMPORTANT TWO ROWS
    imagesavealpha($resource, true);
    imagefill($resource, 0, 0, 0x7fffffff);

    if ($ext == 'jpeg' || $ext == 'jpg') {
        $image = imagecreatefromjpeg($filename);
    } else if ($ext == 'png') {
        $image = imagecreatefrompng($filename);
    } else {
        throw new Exception('Unsupported extension');
    }

    imagecopyresampled(
        $resource,
        $image, 0, 0, 0, 0,
        $w, $h, $origW, $origH
    );
    imagedestroy($image);

    return $resource;
}
0 голосов
/ 24 января 2012

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

0 голосов
/ 24 января 2012

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

$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);
...