php: создать миниатюру нестандартного размера - PullRequest
0 голосов
/ 13 декабря 2011

Я знаком с изменением размера и обрезкой изображений в php с использованием imagecopyresampled, но теперь у меня возникла особая проблема: задача обрезка большого изображения, например, из. От 1600x1200 до 500x120, что означает изменение размера до 500px и уменьшение его высоты до 120px. Есть ли какой-то простой способ или мне нужно рассчитать значения обрезки все самостоятельно? спасибо

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Существует PHP-библиотека, которая может вам помочь, называется PHPThumb. Вы можете найти здесь https://github.com/masterexploder/PHPThumb

У них есть метод адаптивного изменения размера, который делает то, что вы ищете. https://github.com/masterexploder/PHPThumb/wiki/Basic-Usage

0 голосов
/ 13 декабря 2011

Ты должен сделать это сам.

Я не знаю, хотите ли вы обрезать или нет, поэтому вот как рассчитать значения для обоих:

Масштабное изображение : изменить размер, чтобы вписать в новый wxhсохранение соотношения сторон (поэтому 1 сторона может быть короче указанного)

function calc_scale_dims($width_orig, $height_orig, $max_width, $max_height) { 

    $new_width=$width_orig;
    $new_height=$height_orig;
    $ratioh = $max_height/$new_height;
    $ratiow = $max_width/$new_width;
    $ratio = min($ratioh, $ratiow);
    // New dimensions
    $dims["w"] = intval($ratio*$new_width);
    $dims["h"] = intval($ratio*$new_height); 

    return $dims;
}

Изменить размер и обрезать : изменение размера изображения и его обрезка в соответствии с заданным размером, если новое соотношение сторон отличается (например, если пропорции отличаются, изображение будет изменено в соответствии с указанным размером на коротком и длинном, если обрезается посередине)

function calc_crop_resize_dims($width_orig, $height_orig, $new_width, $new_height) { 

    //Calculate scaling
    $ratio_orig = $width_orig/$height_orig;
    $ratio_new = $new_width/$new_height;

    if ($ratio_new < $ratio_orig) {
       $copy_width = $height_orig*$ratio_new;
       $copy_height = $height_orig;
    } else {
       $copy_width = $width_orig;
       $copy_height = $width_orig/$ratio_new;
    }

    //point to start copying from (to copy centre of image if we are cropping)
    $dims["src_x"] = ($width_orig - $copy_width)/2;
    $dims["src_y"] = ($height_orig - $copy_height)/2;
    $dims["copy_width"] = $copy_width;
    $dims["copy_height"] = $copy_height;

    return $dims;
}
...