php загрузка изображения с водяным знаком и изменение размера - PullRequest
0 голосов
/ 29 февраля 2020

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

Я хочу, чтобы изображения отображались в формате 1080X1080, но хорошего качества. Я пытался уменьшить ограниченный размер загрузки, но некоторые пользователи не знают, как изменить размер фотографий!

    $total = count($_FILES['document']['name']);

    if($total > 0 ) {


        $total = count($_FILES['document']['name']);
      
        if($total<=4)
        {
           
            for( $i=0 ; $i < $total ; $i++ ) {
            
        $canUpload = canUpload($_FILES['document'],$i);



        if ($canUpload === true){



            if (!is_dir($uploadDir)){



                umask(0);



                mkdir($uploadDir, 0775);



            }

            $newfile = time().$_FILES['document']['name'][$i];
            
            if($i==0)
            $filename = $newfile;
            
            if($i==0)
            $filename2 = $newfile;
            else
            $filename2=$filename2.",".$newfile;



            if (file_exists($uploadDir. '/' .$newfile)){
                
                $documentError = 'File already exsist';
                
            } else {
                
                move_uploaded_file($_FILES['document']['tmp_name'][$i], $uploadDir. '/' .$newfile);
                
            }
            
        } else{
            
            $documentError = $canUpload;
        }
            }
           
        }
        else
        {
           $documentError ="4 images allowed Only!"; 
        }

1 Ответ

2 голосов
/ 29 февраля 2020

Вам необходимо использовать функции PHP ImageMagick или GD для работы с изображениями.

Например, с GD это так же просто, как ...

function resize_image($file, $w, $h, $crop=FALSE) {
    list($width, $height) = getimagesize($file);
    $r = $width / $height;
    if ($crop) {
        if ($width > $height) {
            $width = ceil($width-($width*abs($r-$w/$h)));
        } else {
            $height = ceil($height-($height*abs($r-$w/$h)));
        }
        $newwidth = $w;
        $newheight = $h;
    } else {
        if ($w/$h > $r) {
            $newwidth = $h*$r;
            $newheight = $h;
        } else {
            $newheight = $w/$r;
            $newwidth = $w;
        }
    }
    $src = imagecreatefromjpeg($file);
    $dst = imagecreatetruecolor($newwidth, $newheight);
    imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

    return $dst;
}

И вы можете вызывать эту функцию, например, так ...

$img = resize_image(‘/path/to/some/image.jpg’, 200, 200);

Из личного опыта, повторная выборка изображений в GD также значительно уменьшает размер файла, особенно при повторной выборке. необработанные изображения с цифровой камеры.

и для водяного знака

A хороший пример в руководстве PHP:

// Load the stamp and the photo to apply the watermark to
$stamp = imagecreatefrompng('stamp.png');
$im = imagecreatefromjpeg('photo.jpeg');

// Set the margins for the stamp and get the height/width of the stamp image
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

// Copy the stamp image onto our photo using the margin offsets and the photo 
// width to calculate positioning of the stamp. 
imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));

// Output and free memory
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...