Помогите с PHP

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 12 апреля 2015 в 13:52
Есть проект на 1.9.
Когда-то ставил для него Хак, чтобы при регистрации пользователи сразу загружали аватар и имели возможность его обрезать. В одном из файлов PHP указано условие, чтобы фото уменьшалось в пропорции от загружаемого файла, а не в пикселях, которые я могу регулировать у себя в «Настройках профилей». Автор хака уже давно удалился с этого форума и нужна ваша помощь.

Необходимо указать фиксированное уменьшение аватара (ширина 300px, высота 500 px), но чтобы сохранялись пропорции фото. Или еще лучше отменить все условия хака, чтобы действовало стандартное уменьшение и сжатие фото, которое заложено в Инстант 1.9.

Вот файл PHP:
<?php
$uploaddir = './images/users/avatars/';

$ext = pathinfo($_FILES['uploadfile']['name'], PATHINFO_EXTENSION);
$file_name = md5($_FILES['uploadfile']['name']. time()). '.'. $ext;
$file_path = $uploaddir. basename($file_name);

if (move_uploaded_file($_FILES['uploadfile']['tmp_name'], $file_path)) {

list($height,$width, $image_type) = getimagesize($file_path);

if ($width > $height) $percent = 100 / $width*5;
else $percent = 100 / $height*4;

//уменьшеный размер для картинки
$new_width = $height* $percent;
$new_height = $width * $percent;


$image_tmp = imageCreateTrueColor($new_width, $new_height);
switch ($image_type) {
case 1:
$image = imageCreateFromGIF($file_path);
imageCopyResampled($image_tmp, $image, 0, 0, 0, 0, $new_height, $new_width, $height, $width);
imageJPEG($image_tmp, $file_path, 100);
break;
case 2:
$image = imageCreateFromJPEG($file_path);
imageCopyResampled($image_tmp, $image, 0, 0, 0, 0, $new_width, $new_height, $height, $width);
imageJPEG($image_tmp, $file_path, 100);
break;
case 3:
$image = imageCreateFromPNG($file_path);
imageCopyResampled($image_tmp, $image, 0, 0, 0, 0, $new_height, $new_width, $height, $width);
imageJPEG($image_tmp, $file_path, 100);
break;
default:
$image = imageCreateFromJPEG($file_path);
imageCopyResampled($image_tmp, $image, 0, 0, 0, 0, $new_height, $new_width, $height, $width);
imageJPEG($image_tmp, $file_path, 100);
break;
}


$mas['filename'] = $file_name;
$mas['success'] = 1;
$mas['width'] = $new_width;
$mas['height'] = $new_height;
echo json_encode($mas);
//print_r($mas);
} else {
$mas['success'] = 0;
echo json_encode($mas);
}

#2 12 апреля 2015 в 14:56
Скачайте себе icms 1.9 и смержите файлы. Мерге сразу покажет вам файлы с хаком. Ну, а уж остальное не проблема.
#3 12 апреля 2015 в 15:22


Скачайте себе icms 1.9 и смержите файлы. Мерге сразу покажет вам файлы с хаком. Ну, а уж остальное не проблема.

Странник
Я знаю какие файлы с хаком, но я не прогер, поэтому и спрашиваю. Файл где нужно править под спойлером в первом сообщении.
#4 12 апреля 2015 в 15:44

под спойлером

Man
Дружище, у меня мозг не жесткий диск, я тоже на память весь код инстанта не помню, чтобы по коду найти вам хак)))
Смотрите, у вас написано:
  1. //уменьшеный размер для картинки
  2. $new_width = $height* $percent;
  3. $new_height = $width * $percent;
Где вычисляются новые значения ширины и высоты соответственно
Вот вам пример кода, чтобы сохранялись пропорции, но размеры рисунка не были меньше 300 пикселей в ширину или 500 пикселей в высоту:
  1. if($new_width < 300){$new_percent = (int)$new_width/$new_height; $new_width = 300; $new_height = $new_width*$new_percent; }
  2. if($new_height <500){$new_percent = (int)$new_height/$new_width; $new_height = 500; $new_width = $new_height*$new_percent; }
Этот код вставите сразу после первого фрагмента
#5 12 апреля 2015 в 21:00
Предложенный вами хак растягивает фото и по ширине и по длине на 500 px не зависимо от первоначального размера фото.

Я уже сам нашел, где нужно править. Это вот это место:
if ($width > $height) $percent = 100 / $width*5;
else $percent = 100 / $height*4;
-----------------------------------------------------------------------------------
Возможно ли дописать какую-нибудь строчку, чтобы фотографии сжимались и весили не более 50 кб?
#6 13 апреля 2015 в 08:58
Видите, стали чуток меньше пхп бояться. С первой победой)
#7 13 апреля 2015 в 16:24
Возможно ли дописать какую-нибудь строчку, чтобы фотографии сжимались и весили не более 50 кб?
#8 13 апреля 2015 в 17:34
Почитайте мануал к библиотеке GD. Через нее и идет изменение размеров рисунка.
#9 13 апреля 2015 в 19:25
Господа! Кто-нибудь в этом действительно разбирается? Если да, то напишите стоимость вашей подсказки в личку.
Для облегчения работы могу выслать сам хак с инструкцией.

Нужно только, чтобы фотографии сжимались и весили не более 50 кб.
#10 13 апреля 2015 в 20:25

Нужно только, чтобы фотографии сжимались и весили не более 50 кб.

Man

— Первую часть вы уже сделали сами практически…

— У второй нет тривиальных решений.
Фото с размерами 300 × 500 пикселов может весить 440Kb ( без сжатия, 72 dpi на дюйм /*Экранное разрешение (win)*/ )
или 69Kb ( сжатие максимальное( 0 из 100 ) изображение содержит хаотичный набор пикселов (шум), первое загруженное
или 6,9Kb ( 0 из 100 ) типичный портрет, второе загруженное

#11 13 апреля 2015 в 20:34
Можно конечно заставить скрипт высчитывать вес самого файла после загрузки и сжатия и уменьшать сначала качество, а, затем и размеры, этакий даунгрейд. Но это будет нещадно жрать ресурсы сервера, а в случае сбоев и файловой системы ( доступное место для записи ).
На мой взгляд не нужно так «заморачиваться» просто уменьшите сразу максимальные размеры до 120 × 200 у средней копии с качесвтом 75%, при этом в изображении будет оставаться достаточное количество деталей и весить много оно не должно.
#12 13 апреля 2015 в 22:39
Благодарю!
Напишите мне в личку номер кошелька, я закину на пиво.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.