Нужно найти в коде что просходит с фото при загрузке фалов и привести код фкнкции/й
Хорошо. Начнем все по порядку.
Сначала для автобб, а затем для карс2.ру.
Я скачал компонент с вашего сайта, подменил все свои php и XML файлы на файлы из дистрибутива.
Тестирую загрузку фото на изображении, которое можно скачать здесь avtorunok.com.ua/images/57_122_original.jpg
В файле admin.autobb.php есть следующий код
//добавление фотографий
$database->setQuery ( "SELECT count (*) FROM #__autobb_photos WHERE msgid=$row->id");
$photos_count = intval ( $database->loadResult () );
for ( $i=0; $i < $autobbConfig->photos_maxnum - $photos_count; $i++ ) {
$photofile = 'photofile_'.$i;
if ( isset ( $_FILES[$photofile] ) && ( $_FILES[$photofile]['size'] > 0 ) ) {
if ( file_exists ( $_FILES[$photofile]['tmp_name'] ) ) {
$imagesize = array (0, 0, 0, 0);
$imagesize = getImageSize ( $_FILES[$photofile]['tmp_name'] );
$tmp2 = $_FILES[$photofile]['tmp_name'];
if ( ( $imagesize[2] == 1 ) || ( $imagesize[2] == 2 ) || ( $imagesize[2] == 3 ) ) { // проверка типа изображения. Допустимы только GIF, PNG или JPG
//if ( ( $imagesize[0] <= $autobbConfig->photos_maxwidth ) && ( $imagesize[1] <= $autobbConfig->photos_maxheight ) ) { // проверка по габаритам изображения
$image = NULL;
if ( $imagesize[2] == 1 ): $image = @imageCreateFromGif ( $_FILES[$photofile]['tmp_name'] );
elseif ( $imagesize[2] == 2 ): $image = @imageCreateFromJpeg ( $_FILES[$photofile]['tmp_name'] );
else: $image = @imageCreateFromPng ( $_FILES[$photofile]['tmp_name'] );
endif;
if ($image) {
/* $filename = date ("YmdHis").'-'.($row->id).'-'.$i.'.jpg';
$uploadfile = $mosConfig_absolute_path.'/components/com_autobb/photos/'.$filename;*/
$photos_dir = $mosConfig_absolute_path.'/components/com_autobb/photos/';
$message_dir = $photos_dir.$row->id;
if ( !file_exists ( $message_dir ) ) {
mkdir ( $message_dir );
if ( $mosConfig_dirperms!='' ) @chmod ( message_dir, $mosConfig_dirperms );
}
$filename = ($row->id)."/".date ("YmdHis").'-'.($row->id).'-'.$i.'.jpg';
$uploadfile = $photos_dir.$filename;
imageresize ($uploadfile,$tmp2);
//imageJpeg ( $image, $uploadfile, $autobbConfig->photos_savequality );
/*TODO устнаовить права на файл в соответствии с настройкаим сайта*/
if ( $mosConfig_fileperms!='' ) @chmod ( $uploadfile, $mosConfig_fileperms );
$newphoto = new mosAutoBBPhoto ( $database );
$newphoto->title = $filename;
$newphoto->msgid = $row->id;
$newphoto->store ();
imageDestroy ( $image );
}
В нем закомментировал проверку на размеры изображения, чтобы исключить влияние настроек и в файле autobb.class.php функцию imageresize привел к виду:
/* Ресайз фото */
function imageresize ($outfile,$infile) {
global $autobbConfig;
$imagesize = array (0, 0, 0, 0);
$imagesize = getImageSize ($infile);
/* if ($imagesize[0]>$autobbConfig->photos_maxwidth) $neww=$autobbConfig->photos_maxwidth;
else*/
$neww=$imagesize[0];
$newh = intval (round ($neww*($imagesize[1]/$imagesize[0]) ));
switch ( $imagesize[2] ) {
case 1: $im = @imageCreateFromGif ( $infile ); break;
case 2: $im = @imageCreateFromJpeg ( $infile ); break;
case 3: $im = @imageCreateFromPng ( $infile ); break;
default: emptyImage ( 'spez', 800 );
}
$im1=imagecreatetruecolor ($neww,$newh);
//if ( $autobbConfig->photos_antialias )
imagecopyresampled ( $im1, $im, 0, 0, 0, 0, $neww, $newh, imagesx ($im), imagesy ($im));
//else imagecopyresized ( $im1, $im, 0, 0, 0, 0, $neww, $newh, imagesx ($im), imagesy ($im));
//$autobbConfig->photos_savequality
imagejpeg ($im1,$outfile,80);
imagedestroy ($im);
imagedestroy ($im1);
unset ($imagesize, $neww, $newh);
}
/* -- Ресайз */
На маленьких изображениях скрипт работает, на тестовом - нет.
У карс2.ру код выглядит следующим образом:
// Обработчик изображений
при размещении фото вызывается скрипт save_image.php, код ниже
<?php
// Если через POST передан файл
if (!empty ($_FILES['file'])){
// Цикл по tmp_name файлов
foreach ($_FILES['file']['tmp_name'] as $id => $tmp_name) {
// Если файл существует
if (!empty ($tmp_name)){
if ($_FILES['file']['type'][$id] == 'image/jpeg' OR $_FILES['file']['type'][$id] == 'image/pjpeg'){
// Создаём запись, чтобы получить ID картинки
$insert_id = db_insert (array (
'images' => array (
'ads_id' => $ads_id,
),
));
// Сохраняем маленькое изображение
$image_size_small = save_image (array (
'width' => '50',
'height' => '50',
'quality' => '90',
'input' => $tmp_name,
'output' => $global['script_path'].'/images/'.$ads_id.'_'.$insert_id['images'].'_small.jpg',
'output_original' => $global['script_path'].'/images/'.$ads_id.'_'.$insert_id['images'].'_original.jpg',
));
// Сохраняем размер картинки
db_update (array (
'images' => array (
$insert_id['images'] => array (
'width_small' => $image_size_small['width'],
'height_small' => $image_size_small['height'],
),
),
));
// Сохраняем среднее изображение (для /index.php)
$image_size_medium = save_image (array (
'width' => '120',
'height' => '120',
'quality' => '90',
'input' => $tmp_name,
'output' => $global['script_path'].'/images/'.$ads_id.'_'.$insert_id['images'].'_medium.jpg',
));
// Сохраняем размер картинки
db_update (array (
'images' => array (
$insert_id['images'] => array (
'width_medium' => $image_size_medium['width'],
'height_medium' => $image_size_medium['height'],
),
),
));
// Сохраняем большое изображение (для /info.php)
$image_size_big = save_image (array (
'width' => '380',
'height' => '380',
'quality' => '90',
'input' => $tmp_name,
'output' => $global['script_path'].'/images/'.$ads_id.'_'.$insert_id['images'].'_big.jpg',
));
// Сохраняем размер картинки
db_update (array (
'images' => array (
$insert_id['images'] => array (
'width_big' => $image_size_big['width'],
'height_big' => $image_size_big['height'],
),
),
));
// Отмечаем в объявлении что есть фотографии
db_update (array (
'ads' => array (
$ads_id => array (
'images' => '1',
),
),
));
}} // end if - Если файл существует
} // end foreach - Цикл по tmp_name файлов
} // end if - Если через POST передан файл
?>
В файле imit.php - библиотеке функций присутствует следующий код
/*-------------------------------------------------------------------------
// Пример вызова функции
save_image (array (
'width' => '500',
'height' => '500',
'quality' => '90',
'input' => $_FILES['req_file']['tmp_name'],
'output' => $_SERVER[DOCUMENT_ROOT].'/images/normal/'.$last_id.'.jpg',
));
-------------------------------------------------------------------------*/
function save_image ($image){
// Если изображение существовало - его нужно предварительно удалить
if (file_exists ($image['output'])){unlink ($image['output']);}
// размер загруженного изображения
list ($width, $height) = getimagesize ($image['input']);
// проверяем - нужно-ли вообще уменьшать изображение
$resize = 0;
if ($image['width'] < $width){$resize = 1;}
if ($image['height'] < $height){$resize = 1;}
// пересчитываем пропорционально размеры
if ($resize == 1){
if ($height < $width){
$scale = $width / $image['width'];
$image['height'] = $height / $scale;
$image['height'] = ceil ($image['height']);
}
else{
$scale = $height / $image['height'];
$image['width'] = $width / $scale;
$image['width'] = ceil ($image['width']);
}
} // end if resize
// Если картинка меньше указанной - используем оригинальный размер картинки
else{
$image['height'] = $height;
$image['width'] = $width;
}
// Уменьшаем изображение
if ($resize == 1){
$image_p = imagecreatetruecolor ($image['width'], $image['height']);
$image_f = imagecreatefromjpeg ($image['input']);
imagecopyresampled ($image_p, $image_f, 0, 0, 0, 0, $image['width'], $image['height'], $width, $height);
imagejpeg ($image_p, $image['output'], $image['quality']);
}
// Копируем оригинальное изображение
else{
copy ($image['input'], $image['output']);
}
// Копируем большое изображение
if (!empty ($image['output_original'])){
copy ($image['input'], $image['output_original']);
}
// Возвращаем ширину и высоту картинки
$out['width'] = $image['width'];
$out['height'] = $image['height'];
return $out;
} // end function