t-alexashka
@t-alexashka
Сразу пишу legacy код

Как через php уменьшить картинку в imagemagick?

Нужно сделать мини-restapi для уменьшения фоток на своем сайте. Кидаю урл картинки как гет-параметр в метод, и нужно как то сказать imagemagick'у что ее надо уменьшить. Подскажите кто с ним работал, как это сделать? Спасибо.
  • Вопрос задан
  • 3415 просмотров
Решения вопроса 2
KorsaR-ZN
@KorsaR-ZN
imagemagick - как консольная утилита или PHP модуль?

для консольной утилиты, для модуля
Ответ написан
t-alexashka
@t-alexashka Автор вопроса
Сразу пишу legacy код
header("Content-type: image/jpeg");
$photo='http://mysite.ru/photo.jpg';
system("convert $photo -thumbnail 100x100 JPG:-");


вот что мне нужно было. вопрос решен, спасибо.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Делал у себя в одном парсере так
$imgUrl = 'http://www.site.ru/img/path/img.jpg';
$i = file_get_contents($imgUrl);
if(strpos($imgUrl, '.jpg'))      $ext = '.jpg';
elseif(strpos($imgUrl, '.png'))  $ext = '.png';
elseif(strpos($imgUrl, '.jpeg')) $ext = '.png';
elseif(strpos($imgUrl, '.gif'))  $ext = '.gif';
$filename = md5(rand(10000, 99999999)) . $ext;
file_put_contents(CRON_DIR . 'parse_data/img/' . $filename, $i);
$rgImages = upload_images('parse_data/img/' . $filename, $ext)
unlink(CRON_DIR . 'parse_data/img/' . $filename);

function upload_images($img, $ext){
        $folder = '/UPLOAD/'.date('Y/m/d') . '/';
        if(!is_dir(ROOT_DIR.$folder)){
            mkdir(ROOT_DIR.$folder, 0777, true);
        }
        
        $rgFiles = array();
        
        $orig = $folder.md5(time().mt_rand(0,999999)).$ext; 
        
        $img = file_get_contents(CRON_DIR.$img);
        file_put_contents(ROOT_DIR.$orig, $img);
        chmod(ROOT_DIR.$orig, 0777); 
        
        $rgFiles['sys_thumb']     = make_resize_image(ROOT_DIR.$orig, $ext, 75, 75);
        $rgFiles['preview']       = make_resize_image(ROOT_DIR.$orig, $ext, 800, 600);
        $rgFiles['thumb']         = make_resize_image(ROOT_DIR.$orig, $ext, 200, 200, 0);
        $rgFiles['thumb2']        = make_resize_image(ROOT_DIR.$orig, $ext, 364, 364);
        $rgFiles['original']      = $orig;
        
        return serialize($rgFiles);
    }
    
function make_resize_image($orig_filename, $ext, $w1, $h1, $crop = 1){
        
        $dir = '/UPLOAD/'.date('Y/m/d') . '/';
        if(!is_dir(ROOT_DIR.$dir)){
            mkdir(ROOT_DIR.$dir, 0777, true);
        }
        
        do {
            $filename = md5(time().mt_rand(0,999999)).$ext; 
        } while (file_exists(ROOT_DIR.$dir.$filename));
        
        $file = $dir.$filename;
        
        list($w0,$h0)=getimagesize($orig_filename);
    	if($w1!=0 && $h1!=0 && !$crop){
        	$p0=$w0/$h0;
        	$p1=$w1/$h1;
        				
        	if($p0>$p1)$h1=0;
        	else $w1=0;			
    	}
        
    	if(class_exists('Imagick')){
    		$thumb = new Imagick();
    		$thumb->readImage($orig_filename);
    		if($crop) $thumb->cropThumbnailImage($w1, $h1);
    		else $thumb->thumbnailImage($w1, $h1);
    		$thumb->writeImage(ROOT_DIR.$file);
    		$thumb->destroy();
    	}  
    	 
    	chmod(ROOT_DIR.$file, 0777);
    	
    	return $file;
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
26 апр. 2024, в 09:18
500 руб./в час
26 апр. 2024, в 06:46
1500 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект