Не работает создание миниатюры JPEG картинки

Bars

Новичок
Тупо ничего не выводится, даже error_reporting(E_ALL); ничего не показывает. В чём проблема?
PHP:
<?php
$url = $_GET['url'];
if (strpos($url, 'scontent.cdninstagram.com') == false || strpos($url, 't51.2885-15') == false) echo 'Access Denied!';

$src = imagecreatefromjpeg($url);
$oldW = imagesx($src);
$oldH = imagesy($src);
// Даже с этим:
// $newW = $oldW, $newH = $oldH;
// $max_width = 640, $max_height = 640;
if ($oldW < $oldH) {
  $newW = $oldW * ($max_width / $oldH);
  $newH = $max_height;
} else {
  $newW = $max_width;
  $newH = $oldH * ($max_height / $oldW);
}

$new = imagecreatetruecolor($newW, $newH);
imagecopyresampled($new, $src, 0, 0, 0, 0, $newW, $newH, $oldW, $oldH);
header('Content-Type: image/jpeg');

imagejpeg($new);
imagedestroy($new);
imagedestroy($src);
?>
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
ну есть еще display_errors
 
  • Like
Реакции: WMix

WMix

герр M:)ller
Партнер клуба
я убрал бы на время отладки header
PHP:
imagedestroy($new);
imagedestroy($src);
эту педантичность
ну и возможно браузер подглючивает, размера нет заранее
 

AnrDaemon

Продвинутый новичок
Я бы вообще на месте ТС взял IMagick и не морочился.
После того, как я нарыл по нему нормальную доументацию, я кучу кода на помойку отправил.
 

AnrDaemon

Продвинутый новичок
Если такие задачи возникают постоянно - его тупо надо взять и тупо установить.
Вся вон та портянка элементарно помещается в три строчки.
PHP:
        $img = new Imagick(GALLERY_BASE_DIR."/{$fname}");
        $img->thumbnailImage(GALLERY_PREVIEW_X, GALLERY_PREVIEW_Y, true);
        $img->writeImage(GALLERY_BASE_DIR."/.preview/{$fname}");
 

Bars

Новичок
Всё решено. Рабочий оконечный вариант:
PHP:
<?php
$url = $_GET['url'];
if (strpos($url, 'scontent.cdninstagram.com') == false
 || strpos($url, 't51.2885-15') == false)
   die('Сторонняя картинка! Обрезать не буду.');

$src = imagecreatefromjpeg($url);
$oldW = imagesx($src);
$oldH = imagesy($src);
if ($oldW == $oldH) {
  die('Размеры изображения совпадают. Обрезать нечего!');
} else if ($oldW < $oldH) {
  $pad = round(($oldH - $oldW) / 2);
  $img = ImageCreateTrueColor($oldW, $oldW);
  imagecopy($img, $src, 0, 0, 0, $pad, $oldW, $oldH);
} else {
  $pad = round(($oldW - $oldH) / 2);
  $img = ImageCreateTrueColor($oldH, $oldH);
  imagecopy($img, $src, 0, 0, $pad, 0, $oldW, $oldH);
}

header('Content-Type: image/jpeg');
imagejpeg($img);
imagedestroy($img);
imagedestroy($src);
?>
Строки 3-6 можно смело удалять, это для себя.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
а если в адрес сторонней картинки добавят &scontent.cdninstagram.com ?
а что если я дам адрес очень большой картинки, и сервер уйдет в своп? :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
да я не знаю, выделит gd память перед тем, как ze определит превышение, или нет
если на сервере пара свободных гигабайт и 10 процессов с дефолтным лимитом - ничего не случится, но разрешение изображения надо проверять
http://www.unforgettable.dk/42.zip
 
Последнее редактирование:
Сверху