Изменение размера изображения в php?

#php #css #image #resize

#php #css #изображение #изменение размера

Вопрос:

Как я могу пропорционально изменить размер изображения в php без «сжатия»? Мне нужно какое-то решение, я искал здесь, но я не мог найти ничего, что мне нужно. Что у меня есть:

 <?php
if (isset($_SESSION['username'])) {
    if (isset($_POST['upload'])) {
        $allowed_filetypes = array('.jpg', '.jpeg', '.png', '.gif');
        $max_filesize      = 10485760;
        $upload_path       = 'gallery/';
        $filename          = $_FILES['userfile']['name'];
        $ext               = substr($filename, strpos($filename, '.'), strlen($filename) - 1);

        if (!in_array($ext, $allowed_filetypes)) {
            die('The file you attempted to upload is not allowed.');
        }

        if (filesize($_FILES['userfile']['tmp_name']) > $max_filesize) {
            die('The file you attempted to upload is too large.');
        }

        if (!is_writable($upload_path)) {
            die('You cannot upload to the specified directory, please CHMOD it to 777.');
        }

        if (move_uploaded_file($_FILES['userfile']['tmp_name'], $upload_path.$filename)) {
            $q = mysqli_query($connection, "UPDATE users SET avatar='".$_FILES['userfile']['name']."' WHERE username ='".$_SESSION['username']."'");
            echo "<font color='#5cb85c'>Браво, успешно си качил/а профилна снимка!</font>";
        } else {
            echo 'There was an error during the file upload.  Please try again.';
        }
    }
    echo ' <form action="images.php" method="post" enctype="multipart/form-data"> ';
    echo ' <input type="file" name="userfile"/>';
    echo ' <input type="submit" name="upload"  value="Качи">';
    echo ' </form>';
} else {
    echo "<font color='#ec3f8c'>Съжелявам! За да  качиш снимка във профила си, <a href='login.php'><font color='#ec3f8c'><b> трябва да се логнеш</b> </font></a></font>";
}
?>
  

Я хочу добавить что-то вроде этого: нажмите здесь

как я вызываю изображения?

 echo '<a href="profiles.php?id='.$rowtwo['id'].'">';
  echo"<img src='gallery/".$rowtwo['avatar']."' width='170px' height='217px'/>"; 
  echo'</a>';
  

Я сохраняю свое изображение аватара в БД в пользователях как аватар.

Комментарии:

1. Где в вашем коде вы изменяете размер изображения?

2. Пока нет, я не знаю, как это сделать. можете ли вы помочь мне с этим для редактирования кода?

3. @user3748181 code.tutsplus.com/tutorials /…

4. ваша ссылка говорит все, почему бы вам просто не следовать этому

5. Да, я знаю, но как я могу связать свой код с кодом, который я опубликовал, я имею в виду ссылку, которую я опубликовал?

Ответ №1:

Гораздо проще использовать JS. Это также работает лучше, потому что вы позволяете клиенту выполнять медленную работу по манипулированию, а не использовать ваши ограниченные ресурсы сервера для этой задачи.

Вот пример:

 //This is the URL to your original image
var linkUrl = "http://www.mywebsite.com/myimage.png";
//This is a div that is necessary to trick JS into letting you manipulate sizing
//Just make sure it exists and is hidden
var img = $('#HiddenDivForImg');

//This is a call to the function
image_GetResizedImage(img, linkUrl);

//This function does the magic
function image_GetResizedImage(img, linkUrl) {
    //Set your max height or width dimension (either, not both)
    var maxDim = 330;
    //Define the equalizer to 1 to avoid errors if incorrect URL is given
    var dimEq = 1;

    //This determines if the larger dimension is the images height or width.
    //Then, it divides that dimension by the maxDim to get a decimal number for size reduction
    if (img.height() > maxDim || img.width() > maxDim) {
        if (img.height() > img.width()) {
            dimEq = maxDim / img.height();
        } else {
            dimEq = maxDim / img.width();
        }
    }

    var imageOutput = "<a href='"   linkUrl   "' target='_blank'>View Larger</a><br /><a href='"   result  
        "' target='_blank'><img src='"   linkUrl   "' style='width: "   img.width() * dimEq
          "px; height: "   img.height() * dimEq   "px' /></a>";

    //This returns a URL for the image with height and width tags of the resized (non-squished) image.
    return imageOutput;
}
  

Ответ №2:

Для обработки изображений в PHP вы можете использовать Imagemagick. http://www.imagemagick.org /

Это команда масштабирования, которую вы ищете.

Ответ №3:

Здесь я создал функцию с вашей ссылочной ссылкой, вы можете использовать ее следующим образом

Назовите это

 //Resize uploaded image 
resize_image($_FILES['userfile'], 100, 200);

//Or if you want to save image with diffrent name
$filename = $upload_path.$_SESSION['username'].'-avatar.jpg';
resize_image($_FILES['userfile'], 100, 200, $newfilename);

//if (move_uploaded_file($_FILES['userfile']['tmp_name'], $upload_path.$filename)) {
        $q = mysqli_query($connection, "UPDATE users SET avatar='".$filename."' WHERE username ='".$_SESSION['username']."'");


        echo "<font color='#5cb85c'>Браво, успешно си качил/а профилна снимка!</font>";
    } else {
        echo 'There was an error during the file upload.  Please try again.';
    }
  

Функция

 function resize_image($image_src, $w = 100, $h = 100, $save_as = null) {
    // Create image from file
    switch(strtolower($image_src['type']))
    {
        case 'image/jpeg':
            $image = imagecreatefromjpeg($image_src['tmp_name']);
            break;
        case 'image/png':
            $image = imagecreatefrompng($image_src['tmp_name']);
            break;
        case 'image/gif':
            $image = imagecreatefromgif($image_src['tmp_name']);
            break;
        default:
            exit('Unsupported type: '.$image_src['type']);
    }

    // Target dimensions
    $max_width = $w;
    $max_height = $h;

    // 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);

    if($save_as) {
        //Save as new file 
        imagejpeg($new, $save_as, 90);
    }else{
        //Overwrite image 
        imagejpeg($new, $image_src['tmp_name'], 90);
    }
       // Destroy resources
           imagedestroy($image);
       imagedestroy($new);
}
  

Комментарии:

1. куда я должен поместить код функций? и как это вызвать позже? Извините, я новичок.

2. поместите функцию над первой строкой прямо перед if (isset($_SESSION['username'])) {

3. Большое вам спасибо, я попробую сейчас 🙂

Ответ №4:

Я использую http://image.intervention.io /. Вы можете масштабировать, кэшировать, хранить, конвертировать и выполнять различные задачи по обработке изображений.

Очень прост в использовании.

 // load the image
$img = Image::make('public/foo.jpg');

// resize the width of the image to 300 pixels and constrain proportions.
$img->resize(300, null, true);

// save file as png with 60% quality
$img->save('public/bar.png', 60);