Загрузка изображений, проверка разрешения, обрезка и предварительный просмотр. PHP - PullRequest
0 голосов
/ 07 октября 2010

Я ищу решение для загрузки изображения, проверьте разрешение, обрежьте его, если необходимо, затем просмотрите изображение, прежде чем оно будет напечатано на холсте.

Я нашел множество примеров этого, ноочевидно, ничего прямолинейного, плюс я не хочу грабить кого-то еще.

ASP НЕ вариант, так как сайт использует PHP и находится в поле 'nix'.

Любые указателибудет высоко ценится.

1 Ответ

1 голос
/ 07 октября 2010

В основном файл должен быть помещен в ваш скрипт PHP. Вы можете сделать это с помощью HTML-форм (input type='file') или jQuery background uploaders . Загрузки по умолчанию хранятся во временном каталоге вашего веб-сервера, текущий каталог можно найти, посмотрев вывод phpinfo().

Далее проверьте $ _ FILES , в частности, глобальный move_uploaded_file () , вы можете найти тип изображения с помощью ключа type в массиве $ _FILES, хотя этим можно манипулировать на стороне клиента может быть лучше проверить тип файла вручную , используя магические байтовые функции .

Как только вы загрузите файл, вам нужно будет им манипулировать. Вы можете использовать GD или ImageMagick , ImageMagick может быть не встроен в вашу версию PHP, GD довольно распространен. Я больше знаком с GD, поэтому я предлагаю вам проверить функции imagecreatefromjpeg () / png / gif & imagecopyresampled () , которые могут как обрезать, так и повторно делать выборку. Чтобы узнать, нужно ли вам обрезать / изменить размер, вы можете проверить соотношение сторон. Вот функция, которую я взбил:

function fixRatio($x, $y, $ratio) {
    $ratio = round($ratio,6);
    $iRatio = round($x / $y, 6);
    if ($iRatio > $ratio) {
        $x = ceil($y * $ratio);
    } else if ($iRatio < $ratio) {
        $y = ceil($x * (1 / $ratio));
    }
    return array('x' => $x, 'y' => $y);
}

Вы вводите ширину, высоту и желаемое соотношение сторон, и это выдаст массив, который содержит исправленные размеры. Вероятно, лучше указать соотношение, разделив желаемую высоту на желаемую ширину, например, fixRatio($x, $y, 640/480). Затем вы можете использовать эту информацию для обрезки изображения w / imagecopyresampled(), в то же время вы можете указать функции ширину и высоту назначения. Так что если все должно быть 640x480, то вы должны указать это при вызове imagecopyresampled(). Затем вы можете использовать iamgejpeg () / gif / png для вывода изображения в виде файла в общедоступный каталог на вашем сервере. Так как он общедоступный, вы можете ссылаться на него через URL, будь то HTML-форма с просьбой подтвердить, нравится ли им то, что он видит, или в элементе canvas .

...