allsender Posted September 16, 2011 Share Posted September 16, 2011 Здравствуйте, при добавлении изображения к товару пример размером 500кб, после нарезки к товару самый большой размер может достигать 20мб, ток же самая маленькая должна весить 1-3кб после нарезки весит все 50кб, как исправить это? Link to comment Share on other sites More sharing options...
Dimitri Yelquin Posted September 16, 2011 Share Posted September 16, 2011 Вы генерацию миниатюр к товару "нарезкой" называете? 500 кб превращаются в 20 мб!? Что-то невозможное. Хотя, при сохранении фотки в PNG c нулевым сжатием возможно очень большое увеличение её веса, но не такое же! А что у Вас в настройках форматов? Выбрали "сохранять всё в PNG 0"? Link to comment Share on other sites More sharing options...
allsender Posted September 16, 2011 Author Share Posted September 16, 2011 Спасибо за внимание! К примеру изображения в папке с нарезкой 800х800px формат jpg может занимать 16mb размер бывает разный приходиться вручную конвертировать тогда изображение становиться пример 300кб. Link to comment Share on other sites More sharing options...
Dimitri Yelquin Posted September 16, 2011 Share Posted September 16, 2011 Ну, знаете... 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 More sharing options...
allsender Posted October 2, 2011 Author Share Posted October 2, 2011 Вот код обработчика тут проблема, когда меняю на новый всё нормально, только вокруг изображения есть тень, она заливается белым фоном в 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 More sharing options...
allsender Posted October 2, 2011 Author Share Posted October 2, 2011 Спасибо за внимание, проблема решена если кому нужно обязательно отпишу как решить. Link to comment Share on other sites More sharing options...
Recommended Posts