Возможно кому-то будет полезен.
Скрипт создания миниатюр с центровкой и сохранением пропорции (отношением сторон).
Скриншот:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- function create_image ( $filepath ) {
- );
- } else {
- $mime = 'jpeg';
- }
- case 'jpg':
- case 'jpe':
- case 'jpeg':
- case 'png':
- case 'gif':
- case 'wbmp':
- }
- }
- return FALSE;
- }
- function create_preview_image ( $original_path, $thumbnail_path, $x_thumbnail, $y_thumbnail ) {
- $result = FALSE;
- // Получаем размеры оригинала
- // Создаем миниатюру
- // Вычисляем размер по ширине
- $x_original_new = (integer) ( $x_thumbnail * ( $y_original / $y_thumbnail ) );
- // Проверяем, не вышли ли за пределы изображения
- if ( $x_original_new > $x_original ) {
- // Вышли. Тогда вычисляем размер по высоте
- $y_original_new = (integer) ( $y_original * ( $x_original / $x_original_new ) );
- $x_original_new = $x_original;
- } else {
- $y_original_new = $y_original;
- }
- // Вычисляем срезы сторон
- $x_indent = $x_original_new - $x_original;
- $y_indent = $y_original_new - $y_original;
- // Вычисляем смещение
- $x_original_offset = ( $x_indent !== 0 ) ? -(integer) ( $x_indent / 2 ) : 0;
- $y_original_offset = ( $y_indent !== 0 ) ? -(integer) ( $y_indent / 2 ) : 0;
- echo <<<HTML
- <!-- Отладка, вывод данных и миниатюры -->
- <span style="display: inline-block; float: left; border: 1px solid #eee; margin: 5px; padding: 5px;">
- Thumbnail: {$x_thumbnail} x {$y_thumbnail}<br />
- Original: {$x_original} x {$y_original} Cropped: {$x_original_new} x {$y_original_new}<br />
- Indent: {$x_indent} x {$y_indent} Offset: {$x_original_offset} x {$y_original_offset}<br />
- <img src="/___/{$thumbnail_path}" />
- </span>
- HTML;
- // Копируем изображение в миниатюру
- imagecopyresampled( $image_thumbnail, $image_original, 0, 0, $x_original_offset, $y_original_offset, $x_thumbnail, $y_thumbnail, $x_original_new, $y_original_new );
- $result = TRUE;
- }
- }
- return $result;
- }