Jump to content

Проблема с размером изображения


Recommended Posts

Здравствуйте, при добавлении изображения к товару пример размером 500кб, после нарезки к товару самый большой размер может достигать 20мб, ток же самая маленькая должна весить 1-3кб после нарезки весит все 50кб, как исправить это?

Link to comment
Share on other sites

Вы генерацию миниатюр к товару "нарезкой" называете? 500 кб превращаются в 20 мб!? Что-то невозможное. Хотя, при сохранении фотки в PNG c нулевым сжатием возможно очень большое увеличение её веса, но не такое же!

 

А что у Вас в настройках форматов? Выбрали "сохранять всё в PNG 0"?

Link to comment
Share on other sites

Спасибо за внимание! К примеру изображения в папке с нарезкой 800х800px формат jpg может занимать 16mb размер бывает разный приходиться вручную конвертировать тогда изображение становиться пример 300кб.

Link to comment
Share on other sites

Ну, знаете... 800 на 800 и 16 мб! Даже, если Вы настройку по умолчанию для jpg 90 поменяли на 100, из "лучших разумеется побуждений", такого получаться не должно. У Вас сейчас какая? Устанавливать больше 90 — глупость. Улучшение качества изображения при изменении настройки сохранения с 90 на 100 будет, но на глаз Вы этого определить уже не сможете. Поэтому нет и смысла менять дефолтную настройку 90. Тем более, что при незаметном улучшении качества Вы получите очень даже заметное увеличение веса изображения. Как минимум, в 4 раза.

 

Идеальный вариант — я здесь где-то уже писал — это выбрать среднюю опцию, то есть, сохранение jpg и gif в формате jpg, а png, как есть. PNG нужно для того чтобы можно было грузить всякие иконки, логотипы и микрофрафику. Потому что у них очень часто нам бывает нужен прозрачный фон. Поскольку это микрографика качество, получаемое при сжатии до 7-ми, для неё достаточно. Большие же фотографии у нас не настолько большие, чтобы им не хватало качества при сжатии до 90 в jpg. С этими настройками мы получаем компромиссный вариант, в котором уравновешены лёгкость изображения и его качество.

Link to comment
Share on other sites

  • 3 weeks later...

Вот код обработчика тут проблема, когда меняю на новый всё нормально, только вокруг изображения есть тень, она заливается белым фоном в images.inc.php стандартом

 

да ещё файлы сохраняються в jpg с прозрачным фоном, jpg нет прозрачного фона только png и gif , наверное тип image/png а сохраняет в имени как jpg

 

images.inc.php

<?php
/**
 * Generate a cached thumbnail for object lists (eg. carrier, order states...etc)
 *
 * @param string $image Real image filename
 * @param string $cacheImage Cached filename
 * @param integer $size Desired size
 */
function cacheImage($image, $cacheImage, $size, $imageType = 'gif')
{
if (file_exists($image))
{
 if (!file_exists(_PS_TMP_IMG_DIR_.$cacheImage))
 {
  list($sourceWidth, $sourceHeight, $image_type, $attr) = getimagesize($image);
  switch ($image_type)
  {
case 1: $src = imagecreatefromgif($image); break;
case 2: $src = imagecreatefromjpeg($image); break;
case 3: $src = imagecreatefrompng($image); break;
default: return '';  break;
  }
  $widthDiff = $size / $sourceWidth;
  $heightDiff = $size / $sourceHeight;

  if( ($widthDiff >= 1) AND ($heightDiff >= 1) )
  {
$tn_width = $sourceWidth;
$tn_height = $sourceHeight;
  }
  else {
if (intval(Configuration::get('PS_IMAGE_GENERATION_METHOD')) == 2 OR (intval(Configuration::get('PS_IMAGE_GENERATION_METHOD')) == 0 AND $widthDiff > $heightDiff))
{
 $tn_width = ceil($heightDiff * $sourceWidth);
 $tn_height = $size;
}
else
{
 $tn_height = ceil($widthDiff * $sourceHeight);
 $tn_width = $size;
}
  }

  $tmp = imagecreatetruecolor($tn_width,$tn_height);
  /* Check if this image is PNG or GIF, then set if Transparent*/
  if(($image_type == 1) OR ($image_type == 3))
  {
imagealphablending($tmp, false);
imagesavealpha($tmp,true);
$transparent = imagecolorallocatealpha($tmp, 255, 255, 255, 127);
imagefilledrectangle($tmp, 0, 0, $tn_width, $tn_height, $transparent);
  }
  imagecopyresampled($tmp,$src,0,0,0,0,$tn_width, $tn_height,$sourceWidth,$sourceHeight);

  $flag = false;
  switch ($image_type)
  {
case 1:
 $flag = imagegif($tmp, _PS_TMP_IMG_DIR_.$cacheImage);
 break;
case 2:
 $flag = imagejpeg($tmp, _PS_TMP_IMG_DIR_.$cacheImage, 100); // best quality
 break;
case 3:
 $flag = imagepng($tmp, _PS_TMP_IMG_DIR_.$cacheImage, 0); // no compression
 break;
  }
  imagedestroy($tmp);

 }
 return '<img src="../img/tmp/'.$cacheImage.'" alt="" class="imgm" />';
}
return '';
}
/**
 * Check image upload
 *
 * @param array $file Upload $_FILE value
 * @param integer $maxFileSize Maximum upload size
 */
function checkImage($file, $maxFileSize)
{
if ($file['size'] > $maxFileSize)
 return Tools::displayError('image is too large').' ('.($file['size'] / 1000).Tools::displayError('KB').'). '.Tools::displayError('Maximum allowed:').' '.($maxFileSize / 1000).Tools::displayError('KB');
if (!isPicture($file))
 return Tools::displayError('image format not recognized, allowed formats are: .gif, .jpg, .png');
if ($file['error'])
 return Tools::displayError('error while uploading image; change your server\'s settings');
return false;
}
function isPicture($file)
{
/* Detect mime content type */
$mime_type = false;
$types = array('image/gif', 'image/jpg', 'image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png');
/*if (function_exists('finfo_open'))
{
	$finfo = finfo_open(FILEINFO_MIME);
 $mime_type = finfo_file($finfo, $file['tmp_name']);
 finfo_close($finfo);
}
else*/if (function_exists('mime_content_type'))
	$mime_type = mime_content_type($file['tmp_name']);
elseif (function_exists('exec'))
	$mime_type = trim(exec('file -b --mime-type '.escapeshellarg($file['tmp_name'])));
if (empty($mime_type) || $mime_type == 'regular file')
 $mime_type = $file['type'];
if (($pos = strpos($mime_type, ';')) !== false)
 $mime_type = substr($mime_type, 0, $pos);
// is it a picture ?
return $mime_type && in_array($mime_type, $types);
}
/**
 * Check icon upload
 *
 * @param array $file Upload $_FILE value
 * @param integer $maxFileSize Maximum upload size
 */
function checkIco($file, $maxFileSize)
{
if ($file['size'] > $maxFileSize)
 return Tools::displayError('image is too large').' ('.($file['size'] / 1000).'ko). '.Tools::displayError('Maximum allowed:').' '.($maxFileSize / 1000).'ko';
if (substr($file['name'], -4) != '.ico')
 return Tools::displayError('image format not recognized, allowed formats are: .ico');
if ($file['error'])
 return Tools::displayError('error while uploading image; change your server\'s settings');
return false;
}
/**
 * Resize, cut and optimize image
 *
 * @param array $sourceFile Image object from $_FILE
 * @param string $destFile Destination filename
 * @param integer $destWidth Desired width (optional)
 * @param integer $destHeight Desired height (optional)
 *
 * @return boolean Operation result
 */
function imageResize($sourceFile, $destFile, $destWidth = NULL, $destHeight = NULL, $fileType = '')
{

list($sourceWidth, $sourceHeight, $image_type, $attr) = getimagesize($sourceFile);
if (!$sourceWidth)
 return false;
if ($destWidth == NULL)
 $destWidth = $sourceWidth;
if ($destHeight == NULL)
 $destHeight = $sourceHeight;

switch ($image_type)
{
	case 1: $src = imagecreatefromgif($sourceFile); break;
	case 2: $src = imagecreatefromjpeg($sourceFile);  break;
	case 3: $src = imagecreatefrompng($sourceFile); break;
	default: return '';  break;
}
$widthDiff = $destWidth / $sourceWidth;
$heightDiff = $destHeight / $sourceHeight;
if( ($widthDiff >= 1) AND ($heightDiff >= 1) )
{
	$tn_width = $sourceWidth;
	$tn_height = $sourceHeight;
}
else {
 if (intval(Configuration::get('PS_IMAGE_GENERATION_METHOD')) == 2 OR (intval(Configuration::get('PS_IMAGE_GENERATION_METHOD')) == 0 AND $widthDiff > $heightDiff))
 {
  $tn_width = ceil($heightDiff * $sourceWidth);
  $tn_height = $destHeight;
 }
 else
 {
  $tn_height = ceil($widthDiff * $sourceHeight);
  $tn_width = $destWidth;
 }
}

$tmp = imagecreatetruecolor($tn_width,$tn_height);
/* Check if this image is PNG or GIF, then set if Transparent*/
if(($image_type == 1) OR ($image_type == 3))
{
	imagealphablending($tmp, false);
	imagesavealpha($tmp,true);
	$transparent = imagecolorallocatealpha($tmp, 255, 255, 255, 127);
	imagefilledrectangle($tmp, 0, 0, $tn_width, $tn_height, $transparent);
}
imagecopyresampled($tmp,$src,0,0,0,0,$tn_width, $tn_height,$sourceWidth,$sourceHeight);
$flag = false;
switch ($image_type)
{
	case 1:
  $flag = imagegif($tmp, $destFile);
  break;
	case 2:
  $flag = imagejpeg($tmp, $destFile, 100); // best quality
  break;
	case 3:
  $flag = imagepng($tmp, $destFile, 0); // no compression
  break;
}
imagedestroy($tmp);

return $flag;
}
/**
 * Cut image
 *
 * @param array $srcFile Image object from $_FILE
 * @param string $destFile Destination filename
 * @param integer $destWidth Desired width (optional)
 * @param integer $destHeight Desired height (optional)
 *
 * @return boolean Operation result
 */
function imageCut($srcFile, $destFile, $destWidth = NULL, $destHeight = NULL, $fileType = 'jpg', $destX = 0, $destY = 0)
{
if (!isset($srcFile['tmp_name']) OR !file_exists($srcFile['tmp_name']))
 return false;
// Source infos
$srcInfos = getimagesize($srcFile['tmp_name']);
$src['width'] = $srcInfos[0];
$src['height'] = $srcInfos[1];
$src['ressource'] = createSrcImage($srcInfos[2], $srcFile['tmp_name']);

// Destination infos
$dest['x'] = $destX;
$dest['y'] = $destY;
$dest['width'] = $destWidth != NULL ? $destWidth : $src['width'];
$dest['height'] = $destHeight != NULL ? $destHeight : $src['height'];
$dest['ressource'] = createDestImage($dest['width'], $dest['height']);

$white = imagecolorallocate($dest['ressource'], 255, 255, 255);
imagecopyresampled($dest['ressource'], $src['ressource'], 0, 0, $dest['x'], $dest['y'], $dest['width'], $dest['height'], $dest['width'], $dest['height']);
imagecolortransparent($dest['ressource'], $white);
$return = returnDestImage($fileType, $dest['ressource'], $destFile);
return ($return);
}
function createSrcImage($type, $filename)
{
switch ($type)
{
 case 1:
  return imagecreatefromgif($filename);
  break;
 case 3:
  return imagecreatefrompng($filename);
  break;
 case 2:
 default:
  return imagecreatefromjpeg($filename);
  break;
}
}
function createDestImage($width, $height)
{
$image = imagecreatetruecolor($width, $height);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
return $image;
}
function returnDestImage($type, $ressource, $filename)
{
$flag = false;
switch ($type)
{
 case 'gif':
  $flag = imagegif($ressource, $filename);
  break;
 case 'png':
  $flag = imagepng($ressource, $filename, 7);
  break;
 case 'jpeg':
 default:
  $flag = imagejpeg($ressource, $filename, 90);
  break;
}
imagedestroy($ressource);
return $flag;
}
/**
 * Delete product or category image
 *
 * @param integer $id_item Product or category id
 * @param integer $id_image Image id
 */
function deleteImage($id_item, $id_image = NULL)
{
$path = ($id_image) ? _PS_PROD_IMG_DIR_ : _PS_CAT_IMG_DIR_;
$table = ($id_image) ? 'product' : 'category';

if (file_exists(_PS_TMP_IMG_DIR_.$table.'_'.$id_item.'.jpg'))
 unlink(_PS_TMP_IMG_DIR_.$table.'_'.$id_item.'.jpg');

if ($id_image AND file_exists($path.$id_item.'-'.$id_image.'.jpg'))
 unlink($path.$id_item.'-'.$id_image.'.jpg');
elseif (!$id_image AND file_exists($path.$id_item.'.jpg'))
 unlink($path.$id_item.'.jpg');
/* Auto-generated images */
$imagesTypes = ImageType::getImagesTypes();
foreach ($imagesTypes AS $k => $imagesType)
 if ($id_image AND file_exists($path.$id_item.'-'.$id_image.'-'.$imagesType['name'].'.jpg'))
  unlink($path.$id_item.'-'.$id_image.'-'.$imagesType['name'].'.jpg');
 elseif (!$id_image AND file_exists($path.$id_item.'-'.$imagesType['name'].'.jpg'))
  unlink($path.$id_item.'-'.$imagesType['name'].'.jpg');
/* BO "mini" image */
if (file_exists(_PS_TMP_IMG_DIR_.$table.'_mini_'.$id_item.'.jpg'))
 unlink(_PS_TMP_IMG_DIR_.$table.'_mini_'.$id_item.'.jpg');
return true;
}
?>

Link to comment
Share on other sites

×
×
  • Create New...