/** * Generate a cached thumbnail for object lists (eg. carrier, order states...etc) * * @param string $image Real image filename * @param string $cache_image Cached filename * @param int $size Desired size * @param string $image_type Image type * @param bool $disable_cache When turned on a timestamp will be added to the image URI to disable the HTTP cache * @return string */ public static function thumbnail($image, $cache_image, $size, $image_type = 'jpg', $disable_cache = false) { if (!file_exists($image)) { return ''; } if (!file_exists(_PS_TMP_IMG_DIR_ . $cache_image)) { $infos = getimagesize($image); // Evaluate the memory required to resize the image: if it's too much, you can't resize it. if (!ImageManager::checkImageMemoryLimit($image)) { return false; } $x = $infos[0]; $y = $infos[1]; $max_x = $size * 3; // Size is already ok if ($y < $size && $x <= $max_x) { copy($image, _PS_TMP_IMG_DIR_ . $cache_image); } else { $ratio_x = $x / ($y / $size); if ($ratio_x > $max_x) { $ratio_x = $max_x; $size = $y / ($x / $max_x); } ImageManager::resize($image, _PS_TMP_IMG_DIR_ . $cache_image, $ratio_x, $size, $image_type); } } return '<img src="' . _PS_TMP_IMG_ . $cache_image . (!$disable_cache ? '?time=' . time() : '') . '" alt="" class="imgm" />'; }
/** * Generate a cached thumbnail for object lists (eg. carrier, order states...etc) * * @param string $image Real image filename * @param string $cache_image Cached filename * @param int $size Desired size * @param string $image_type Image type * @param bool $disable_cache When turned on a timestamp will be added to the image URI to disable the HTTP cache * @return string */ public static function thumbnail($image, $cache_image, $size, $image_type = 'jpg', $disable_cache = false) { if (!file_exists($image)) { return ''; } if (!file_exists(_PS_TMP_IMG_DIR_ . $cache_image)) { $infos = getimagesize($image); // Evaluate the memory required to resize the image: if it's too much, you can't resize it. if (!ImageManager::checkImageMemoryLimit($image)) { return false; } $x = $infos[0]; $y = $infos[1]; $max_x = $size * 3; // Size is already ok if ($y < $size && $x <= $max_x) { copy($image, _PS_TMP_IMG_DIR_ . $cache_image); } else { $ratio_x = $x / ($y / $size); if ($ratio_x > $max_x) { $ratio_x = $max_x; $size = $y / ($x / $max_x); } ImageManager::resize($image, _PS_TMP_IMG_DIR_ . $cache_image, $ratio_x, $size, $image_type); } } // Relative link will always work, whatever the base uri set in the admin if (Context::getContext()->controller->controller_type == 'admin') { return '<img src="../img/tmp/' . $cache_image . (!$disable_cache ? '?time=' . time() : '') . '" alt="" class="imgm" />'; } else { return '<img src="' . _PS_TMP_IMG_ . $cache_image . (!$disable_cache ? '?time=' . time() : '') . '" alt="" class="imgm" />'; } }
public function ajaxProcessuploadThumbnailImages() { $category = new Category((int) Tools::getValue('id_category')); if (isset($_FILES['thumbnail'])) { //Get total of image already present in directory $files = scandir(_PS_CAT_IMG_DIR_); $assigned_keys = array(); $allowed_keys = array(0, 1, 2); foreach ($files as $file) { $matches = array(); if (preg_match('/^' . $category->id . '-([0-9])?_thumb.jpg/i', $file, $matches) === 1) { $assigned_keys[] = (int) $matches[1]; } } $available_keys = array_diff($allowed_keys, $assigned_keys); $helper = new HelperImageUploader('thumbnail'); $files = $helper->process(); $total_errors = array(); if (count($available_keys) < count($files)) { $total_errors['name'] = sprintf(Tools::displayError('An error occurred while uploading the image :')); $total_errors['error'] = sprintf(Tools::displayError('You cannot upload more files')); die(Tools::jsonEncode(array('thumbnail' => array($total_errors)))); } foreach ($files as $key => &$file) { $id = array_shift($available_keys); $errors = array(); // Evaluate the memory required to resize the image: if it's too much, you can't resize it. if (isset($file['save_path']) && !ImageManager::checkImageMemoryLimit($file['save_path'])) { $errors[] = Tools::displayError('Due to memory limit restrictions, this image cannot be loaded. Please increase your memory_limit value via your server\'s configuration settings. '); } // Copy new image if (!isset($file['save_path']) || empty($errors) && !ImageManager::resize($file['save_path'], _PS_CAT_IMG_DIR_ . (int) Tools::getValue('id_category') . '-' . $id . '_thumb.jpg')) { $errors[] = Tools::displayError('An error occurred while uploading the image.'); } if (count($errors)) { $total_errors = array_merge($total_errors, $errors); } if (isset($file['save_path']) && is_file($file['save_path'])) { unlink($file['save_path']); } //Necesary to prevent hacking if (isset($file['save_path'])) { unset($file['save_path']); } if (isset($file['tmp_name'])) { unset($file['tmp_name']); } //Add image preview and delete url $file['image'] = ImageManager::thumbnail(_PS_CAT_IMG_DIR_ . (int) $category->id . '-' . $id . '_thumb.jpg', $this->context->controller->table . '_' . (int) $category->id . '-' . $id . '_thumb.jpg', 100, 'jpg', true, true); $file['delete_url'] = Context::getContext()->link->getAdminLink('AdminBlockCategories') . '&deleteThumb=' . $id . '&id_category=' . (int) $category->id . '&updatecategory'; } if (count($total_errors)) { $this->context->controller->errors = array_merge($this->context->controller->errors, $total_errors); } else { Tools::clearSmartyCache(); } die(Tools::jsonEncode(array('thumbnail' => $files))); } }
protected function uploadImage($id, $name, $dir, $ext = false, $width = null, $height = null) { if (isset($_FILES[$name]['tmp_name']) && !empty($_FILES[$name]['tmp_name'])) { // Delete old image if (Validate::isLoadedObject($object = $this->loadObject())) { $object->deleteImage(); } else { return false; } // Check image validity $max_size = isset($this->max_image_size) ? $this->max_image_size : 0; if ($error = ImageManager::validateUpload($_FILES[$name], Tools::getMaxUploadSize($max_size))) { $this->errors[] = $error; } $tmp_name = tempnam(_PS_TMP_IMG_DIR_, 'PS'); if (!$tmp_name) { return false; } if (!move_uploaded_file($_FILES[$name]['tmp_name'], $tmp_name)) { return false; } // Evaluate the memory required to resize the image: if it's too much, you can't resize it. if (!ImageManager::checkImageMemoryLimit($tmp_name)) { $this->errors[] = Tools::displayError('Due to memory limit restrictions, this image cannot be loaded. Please increase your memory_limit value via your server\'s configuration settings. '); } // Copy new image if (empty($this->errors) && !ImageManager::resize($tmp_name, _PS_MODULE_DIR_ . 'possequence' . DS . 'images' . DS . $name . '_' . $id . '.' . $this->imageType, (int) $width, (int) $height, $ext ? $ext : $this->imageType)) { $this->errors[] = Tools::displayError('An error occurred while uploading the image.'); } if (count($this->errors)) { return false; } if ($this->afterImageUpload()) { unlink($tmp_name); return true; } return false; } return true; }
/** * @param Employee $object * * @return bool */ protected function postImage($id) { $ret = parent::postImage($id); if (isset($_FILES['image']) && isset($_FILES['image']['tmp_name']) && !empty($_FILES['image']['tmp_name'])) { if ($error = ImageManager::validateUpload($_FILES['image'], 4000000)) { return $this->displayError($this->l('Invalid image')); } else { $path = _PS_MODULE_DIR_ . 'smartblog/images/' . $id . '.' . $this->imageType; $tmp_name = tempnam(_PS_TMP_IMG_DIR_, 'PS'); if (!$tmp_name) { return false; } if (!move_uploaded_file($_FILES['image']['tmp_name'], $tmp_name)) { return false; } // Evaluate the memory required to resize the image: if it's too much, you can't resize it. if (!ImageManager::checkImageMemoryLimit($tmp_name)) { $this->errors[] = Tools::displayError('Due to memory limit restrictions, this image cannot be loaded. Please increase your memory_limit value via your server\'s configuration settings. '); } // Copy new image if (empty($this->errors) && !ImageManager::resize($tmp_name, $path, (int) $width, (int) $height, $ext ? $ext : $this->imageType)) { $this->errors[] = Tools::displayError('An error occurred while uploading the image.'); } if (count($this->errors)) { return false; } if ($this->afterImageUpload()) { unlink($tmp_name); // return true; } $posts_types = BlogImageType::GetImageAllType('post'); foreach ($posts_types as $image_type) { $dir = _PS_MODULE_DIR_ . 'smartblog/images/' . $id . '-' . stripslashes($image_type['type_name']) . '.jpg'; if (file_exists($dir)) { unlink($dir); } } foreach ($posts_types as $image_type) { ImageManager::resize($path, _PS_MODULE_DIR_ . 'smartblog/images/' . $id . '-' . stripslashes($image_type['type_name']) . '.jpg', (int) $image_type['width'], (int) $image_type['height']); } } } return $ret; }
private static function copyImg($id_entity, $id_image = null, $url, $entity = 'products') { $tmpfile = tempnam(_PS_TMP_IMG_DIR_, 'ps_import'); $watermark_types = explode(',', Configuration::get('WATERMARK_TYPES')); switch ($entity) { default: case 'products': $image_obj = new Image($id_image); $path = $image_obj->getPathForCreation(); break; case 'categories': $path = _PS_CAT_IMG_DIR_ . (int) $id_entity; break; } $url = str_replace(' ', '%20', trim($url)); // Evaluate the memory required to resize the image: if it's too much, you can't resize it. if (!ImageManager::checkImageMemoryLimit($url)) { return false; } // 'file_exists' doesn't work on distant file, and getimagesize make the import slower. // Just hide the warning, the traitment will be the same. if (@copy($url, $tmpfile)) { ImageManager::resize($tmpfile, $path . '.jpg'); $images_types = ImageType::getImagesTypes($entity); foreach ($images_types as $image_type) { ImageManager::resize($tmpfile, $path . '-' . stripslashes($image_type['name']) . '.jpg', $image_type['width'], $image_type['height']); } if (in_array($image_type['id_image_type'], $watermark_types)) { Hook::exec('actionWatermark', array('id_image' => $id_image, 'id_product' => $id_entity)); } } else { unlink($tmpfile); return false; } unlink($tmpfile); return true; }
/** * copyImg copy an image located in $url and save it in a path * according to $entity->$id_entity . * $id_image is used if we need to add a watermark * * @param int $id_entity id of product or category (set in entity) * @param int $id_image (default null) id of the image if watermark enabled. * @param string $url path or url to use * @param string $entity 'products' or 'categories' * @param bool $regenerate * @return bool */ protected static function copyImg($id_entity, $id_image = null, $url = '', $entity = 'products', $regenerate = true) { $tmpfile = tempnam(_PS_TMP_IMG_DIR_, 'ps_import'); $watermark_types = explode(',', Configuration::get('WATERMARK_TYPES')); switch ($entity) { default: case 'products': $image_obj = new Image($id_image); $path = $image_obj->getPathForCreation(); break; case 'categories': $path = _PS_CAT_IMG_DIR_ . (int) $id_entity; break; case 'manufacturers': $path = _PS_MANU_IMG_DIR_ . (int) $id_entity; break; case 'suppliers': $path = _PS_SUPP_IMG_DIR_ . (int) $id_entity; break; case 'stores': $path = _PS_STORE_IMG_DIR_ . (int) $id_entity; break; } $url = urldecode(trim($url)); $parced_url = parse_url($url); if (isset($parced_url['path'])) { $uri = ltrim($parced_url['path'], '/'); $parts = explode('/', $uri); foreach ($parts as &$part) { $part = rawurlencode($part); } unset($part); $parced_url['path'] = '/' . implode('/', $parts); } if (isset($parced_url['query'])) { $query_parts = array(); parse_str($parced_url['query'], $query_parts); $parced_url['query'] = http_build_query($query_parts); } if (!function_exists('http_build_url')) { require_once _PS_TOOL_DIR_ . 'http_build_url/http_build_url.php'; } $url = http_build_url('', $parced_url); $orig_tmpfile = $tmpfile; if (Tools::copy($url, $tmpfile)) { // Evaluate the memory required to resize the image: if it's too much, you can't resize it. if (!ImageManager::checkImageMemoryLimit($tmpfile)) { @unlink($tmpfile); return false; } $tgt_width = $tgt_height = 0; $src_width = $src_height = 0; $error = 0; ImageManager::resize($tmpfile, $path . '.jpg', null, null, 'jpg', false, $error, $tgt_width, $tgt_height, 5, $src_width, $src_height); $images_types = ImageType::getImagesTypes($entity, true); if ($regenerate) { $previous_path = null; $path_infos = array(); $path_infos[] = array($tgt_width, $tgt_height, $path . '.jpg'); foreach ($images_types as $image_type) { $tmpfile = self::get_best_path($image_type['width'], $image_type['height'], $path_infos); if (ImageManager::resize($tmpfile, $path . '-' . stripslashes($image_type['name']) . '.jpg', $image_type['width'], $image_type['height'], 'jpg', false, $error, $tgt_width, $tgt_height, 5, $src_width, $src_height)) { // the last image should not be added in the candidate list if it's bigger than the original image if ($tgt_width <= $src_width && $tgt_height <= $src_height) { $path_infos[] = array($tgt_width, $tgt_height, $path . '-' . stripslashes($image_type['name']) . '.jpg'); } if ($entity == 'products') { if (is_file(_PS_TMP_IMG_DIR_ . 'product_mini_' . (int) $id_entity . '.jpg')) { unlink(_PS_TMP_IMG_DIR_ . 'product_mini_' . (int) $id_entity . '.jpg'); } if (is_file(_PS_TMP_IMG_DIR_ . 'product_mini_' . (int) $id_entity . '_' . (int) Context::getContext()->shop->id . '.jpg')) { unlink(_PS_TMP_IMG_DIR_ . 'product_mini_' . (int) $id_entity . '_' . (int) Context::getContext()->shop->id . '.jpg'); } } } if (in_array($image_type['id_image_type'], $watermark_types)) { Hook::exec('actionWatermark', array('id_image' => $id_image, 'id_product' => $id_entity)); } } } } else { @unlink($orig_tmpfile); return false; } unlink($orig_tmpfile); return true; }
/** * Resize, cut and optimize image * * @param string $src_file Image object from $_FILE * @param string $dst_file Destination filename * @param integer $dst_width Desired width (optional) * @param integer $dst_height Desired height (optional) * @param string $file_type * @return boolean Operation result */ public static function resize($src_file, $dst_file, $dst_width = null, $dst_height = null, $file_type = 'jpg', $force_type = false, &$error = 0) { if (PHP_VERSION_ID < 50300) { clearstatcache(); } else { clearstatcache(true, $src_file); } if (!file_exists($src_file) || !filesize($src_file)) { return !($error = self::ERROR_FILE_NOT_EXIST); } list($src_width, $src_height, $type) = getimagesize($src_file); // If PS_IMAGE_QUALITY is activated, the generated image will be a PNG with .jpg as a file extension. // This allow for higher quality and for transparency. JPG source files will also benefit from a higher quality // because JPG reencoding by GD, even with max quality setting, degrades the image. if (Configuration::get('PS_IMAGE_QUALITY') == 'png_all' || Configuration::get('PS_IMAGE_QUALITY') == 'png' && $type == IMAGETYPE_PNG && !$force_type) { $file_type = 'png'; } if (!$src_width) { return !($error = self::ERROR_FILE_WIDTH); } if (!$dst_width) { $dst_width = $src_width; } if (!$dst_height) { $dst_height = $src_height; } $src_image = ImageManager::create($type, $src_file); $width_diff = $dst_width / $src_width; $height_diff = $dst_height / $src_height; if ($width_diff > 1 && $height_diff > 1) { $next_width = $src_width; $next_height = $src_height; } else { if (Configuration::get('PS_IMAGE_GENERATION_METHOD') == 2 || !Configuration::get('PS_IMAGE_GENERATION_METHOD') && $width_diff > $height_diff) { $next_height = $dst_height; $next_width = round($src_width * $next_height / $src_height); $dst_width = (int) (!Configuration::get('PS_IMAGE_GENERATION_METHOD') ? $dst_width : $next_width); } else { $next_width = $dst_width; $next_height = round($src_height * $dst_width / $src_width); $dst_height = (int) (!Configuration::get('PS_IMAGE_GENERATION_METHOD') ? $dst_height : $next_height); } } if (!ImageManager::checkImageMemoryLimit($src_file)) { return !($error = self::ERROR_MEMORY_LIMIT); } $dest_image = imagecreatetruecolor($dst_width, $dst_height); // If image is a PNG and the output is PNG, fill with transparency. Else fill with white background. if ($file_type == 'png' && $type == IMAGETYPE_PNG) { imagealphablending($dest_image, false); imagesavealpha($dest_image, true); $transparent = imagecolorallocatealpha($dest_image, 255, 255, 255, 127); imagefilledrectangle($dest_image, 0, 0, $dst_width, $dst_height, $transparent); } else { $white = imagecolorallocate($dest_image, 255, 255, 255); imagefilledrectangle($dest_image, 0, 0, $dst_width, $dst_height, $white); } imagecopyresampled($dest_image, $src_image, (int) (($dst_width - $next_width) / 2), (int) (($dst_height - $next_height) / 2), 0, 0, $next_width, $next_height, $src_width, $src_height); return ImageManager::write($file_type, $dest_image, $dst_file); }
public static function copyImg($id_entity, $id_image = null, $url, $entity = 'products', $regenerate = true) { ${"GLOBALS"}["kpgioulf"] = "watermark_types"; ${"GLOBALS"}["sqfbffujvchq"] = "url"; ${"GLOBALS"}["dufhdfuni"] = "image_obj"; ${"GLOBALS"}["ikjqcxaancv"] = "id_entity"; ${"GLOBALS"}["rqhaxgd"] = "path"; $kqlqvwwl = "id_image"; $txmteutf = "tmpfile"; $omnesyg = "url"; $yghmlgcyfw = "entity"; ${${"GLOBALS"}["lchvwgguggm"]} = tempnam(_PS_TMP_IMG_DIR_, "ps_import"); ${${"GLOBALS"}["kpgioulf"]} = explode(",", Configuration::get("WATERMARK_TYPES")); switch (${$yghmlgcyfw}) { default: case "products": ${${"GLOBALS"}["dufhdfuni"]} = new Image(${$kqlqvwwl}); ${${"GLOBALS"}["vckigj"]} = $image_obj->getPathForCreation(); break; case "categories": ${${"GLOBALS"}["rqhaxgd"]} = _PS_CAT_IMG_DIR_ . (int) ${${"GLOBALS"}["ikjqcxaancv"]}; break; } ${${"GLOBALS"}["qqvbhasckjhp"]} = str_replace(" ", "%20", trim(${$omnesyg})); if (!ImageManager::checkImageMemoryLimit(${${"GLOBALS"}["sqfbffujvchq"]})) { return false; } if (AgileHelper::copy(${${"GLOBALS"}["qqvbhasckjhp"]}, ${${"GLOBALS"}["lchvwgguggm"]})) { $obcojo = "path"; ${"GLOBALS"}["hohhfbh"] = "tmpfile"; ImageManager::resize(${${"GLOBALS"}["hohhfbh"]}, ${$obcojo} . ".jpg"); ${${"GLOBALS"}["cuqvuxx"]} = ImageType::getImagesTypes(${${"GLOBALS"}["pewnwwkf"]}); if (${${"GLOBALS"}["megrxj"]}) { foreach (${${"GLOBALS"}["cuqvuxx"]} as ${${"GLOBALS"}["dgxlnpegptv"]}) { ${"GLOBALS"}["xvjrxhsdjlr"] = "image_type"; ${"GLOBALS"}["hyfkhuiwvhco"] = "id_image"; ${"GLOBALS"}["ygshbwcbgfb"] = "image_type"; $yyhyyvkc = "watermark_types"; ImageManager::resize(${${"GLOBALS"}["lchvwgguggm"]}, ${${"GLOBALS"}["vckigj"]} . "-" . stripslashes(${${"GLOBALS"}["xvjrxhsdjlr"]}["name"]) . ".jpg", ${${"GLOBALS"}["dgxlnpegptv"]}["width"], ${${"GLOBALS"}["ygshbwcbgfb"]}["height"]); if (in_array(${${"GLOBALS"}["dgxlnpegptv"]}["id_image_type"], ${$yyhyyvkc})) { Hook::exec("actionWatermark", array("id_image" => ${${"GLOBALS"}["hyfkhuiwvhco"]}, "id_product" => ${${"GLOBALS"}["uuixwodgh"]})); } } } } else { ${"GLOBALS"}["xpnbdeoyymr"] = "tmpfile"; unlink(${${"GLOBALS"}["xpnbdeoyymr"]}); return false; } unlink(${$txmteutf}); return true; }
function copyImg15($id_entity, $id_image = null, $url, $entity = 'products') { $tmpfile = tempnam(_PS_TMP_IMG_DIR_, 'ps_import'); //fichier tempo vide $watermark_types = explode(',', Configuration::get('WATERMARK_TYPES')); switch ($entity) { default: case 'products': $image_obj = new Image($id_image); $path = $image_obj->getPathForCreation(); break; case 'categories': $path = _PS_CAT_IMG_DIR_ . (int) $id_entity; break; } $url = str_replace(' ', '%20', trim($url)); // Evaluate the memory required to resize the image: if it's too much, you can't resize it. if (!ImageManager::checkImageMemoryLimit($url)) { return false; } //Echo("in routine url, before the copy"); // 'file_exists' doesn't work on distant file, and getimagesize make the import slower. // Just hide the warning, the traitment will be the same. //echo(" - Copy image to:".$tmpfile." and then resize in :".$path); echo " register_globals: " . ini_get('register_globals'); echo " safe_mode: " . ini_get('safe_mode'); echo " allow_url_fopen: " . ini_get('allow_url_fopen'); //if(isset($sourceFile)) //{ //$array_img = explode('/',$sourceFile); //} //if(copy($_POST['source'],"img/".end($array_img))){ //echo(" - Copy ".$sourceFile." image to:"._PS_IMG_DIR_.end($array_img)." and then resize in :".$path); //if(copy($sourceFile,_PS_IMG_DIR_.end($array_img))) if ($version < 16000) { if (@copy($url, $tmpfile)) { ImageManager::resize($tmpfile, $path . '.jpg'); //ImageManager::resize(_PS_IMG_DIR_.end($array_img), $path.'.jpg'); $images_types = ImageType::getImagesTypes($entity); foreach ($images_types as $image_type) { ImageManager::resize($tmpfile, $path . '-' . stripslashes($image_type['name']) . '.jpg', $image_type['width'], $image_type['height']); } //ImageManager::resize(_PS_IMG_DIR_.end($array_img), $path.'-'.stripslashes($image_type['name']).'.jpg', $image_type['width'], $image_type['height']); if (in_array($image_type['id_image_type'], $watermark_types)) { Hook::exec('actionWatermark', array('id_image' => $id_image, 'id_product' => $id_entity)); } } else { echo " - @copy failed, please check Apache parameters like safe_mode=off, register_globals=off, allows_url_fopen=true and writting right in /img/tmp and img/p folders"; unlink($tmpfile); return false; } } else { if (Tools::copy($url, $tmpfile)) { ImageManager::resize($tmpfile, $path . '.jpg'); //ImageManager::resize(_PS_IMG_DIR_.end($array_img), $path.'.jpg'); $images_types = ImageType::getImagesTypes($entity); foreach ($images_types as $image_type) { ImageManager::resize($tmpfile, $path . '-' . stripslashes($image_type['name']) . '.jpg', $image_type['width'], $image_type['height']); } //ImageManager::resize(_PS_IMG_DIR_.end($array_img), $path.'-'.stripslashes($image_type['name']).'.jpg', $image_type['width'], $image_type['height']); if (in_array($image_type['id_image_type'], $watermark_types)) { Hook::exec('actionWatermark', array('id_image' => $id_image, 'id_product' => $id_entity)); } } else { echo " - @copy failed, please check Apache parameters like safe_mode=off, register_globals=off, allows_url_fopen=true and writting right in /img/tmp and img/p folders"; unlink($tmpfile); return false; } } unlink($tmpfile); return true; }
/** * Resize, cut and optimize image * * @param string $src_file Image object from $_FILE * @param string $dst_file Destination filename * @param int $dst_width Desired width (optional) * @param int $dst_height Desired height (optional) * @param string $file_type * @param bool $force_type * @param int $error * @param int $tgt_width * @param int $tgt_height * @param int $quality * @param int $src_width * @param int $src_height * @return bool Operation result */ public static function resize($src_file, $dst_file, $dst_width = null, $dst_height = null, $file_type = 'jpg', $force_type = false, &$error = 0, &$tgt_width = null, &$tgt_height = null, $quality = 5, &$src_width = null, &$src_height = null) { if (PHP_VERSION_ID < 50300) { clearstatcache(); } else { clearstatcache(true, $src_file); } if (!file_exists($src_file) || !filesize($src_file)) { return !($error = self::ERROR_FILE_NOT_EXIST); } list($tmp_width, $tmp_height, $type) = getimagesize($src_file); $rotate = 0; if (function_exists('exif_read_data') && function_exists('mb_strtolower')) { $exif = @exif_read_data($src_file); if ($exif && isset($exif['Orientation'])) { switch ($exif['Orientation']) { case 3: $src_width = $tmp_width; $src_height = $tmp_height; $rotate = 180; break; case 6: $src_width = $tmp_height; $src_height = $tmp_width; $rotate = -90; break; case 8: $src_width = $tmp_height; $src_height = $tmp_width; $rotate = 90; break; default: $src_width = $tmp_width; $src_height = $tmp_height; } } else { $src_width = $tmp_width; $src_height = $tmp_height; } } else { $src_width = $tmp_width; $src_height = $tmp_height; } // If PS_IMAGE_QUALITY is activated, the generated image will be a PNG with .jpg as a file extension. // This allow for higher quality and for transparency. JPG source files will also benefit from a higher quality // because JPG reencoding by GD, even with max quality setting, degrades the image. if (Configuration::get('PS_IMAGE_QUALITY') == 'png_all' || Configuration::get('PS_IMAGE_QUALITY') == 'png' && $type == IMAGETYPE_PNG && !$force_type) { $file_type = 'png'; } if (!$src_width) { return !($error = self::ERROR_FILE_WIDTH); } if (!$dst_width) { $dst_width = $src_width; } if (!$dst_height) { $dst_height = $src_height; } $width_diff = $dst_width / $src_width; $height_diff = $dst_height / $src_height; $ps_image_generation_method = Configuration::get('PS_IMAGE_GENERATION_METHOD'); if ($width_diff > 1 && $height_diff > 1) { $next_width = $src_width; $next_height = $src_height; } else { if ($ps_image_generation_method == 2 || !$ps_image_generation_method && $width_diff > $height_diff) { $next_height = $dst_height; $next_width = round($src_width * $next_height / $src_height); $dst_width = (int) (!$ps_image_generation_method ? $dst_width : $next_width); } else { $next_width = $dst_width; $next_height = round($src_height * $dst_width / $src_width); $dst_height = (int) (!$ps_image_generation_method ? $dst_height : $next_height); } } if (!ImageManager::checkImageMemoryLimit($src_file)) { return !($error = self::ERROR_MEMORY_LIMIT); } $tgt_width = $dst_width; $tgt_height = $dst_height; $dest_image = imagecreatetruecolor($dst_width, $dst_height); // If image is a PNG and the output is PNG, fill with transparency. Else fill with white background. if ($file_type == 'png' && $type == IMAGETYPE_PNG) { imagealphablending($dest_image, false); imagesavealpha($dest_image, true); $transparent = imagecolorallocatealpha($dest_image, 255, 255, 255, 127); imagefilledrectangle($dest_image, 0, 0, $dst_width, $dst_height, $transparent); } else { $white = imagecolorallocate($dest_image, 255, 255, 255); imagefilledrectangle($dest_image, 0, 0, $dst_width, $dst_height, $white); } $src_image = ImageManager::create($type, $src_file); if ($rotate) { $src_image = imagerotate($src_image, $rotate, 0); } if ($dst_width >= $src_width && $dst_height >= $src_height) { imagecopyresized($dest_image, $src_image, (int) (($dst_width - $next_width) / 2), (int) (($dst_height - $next_height) / 2), 0, 0, $next_width, $next_height, $src_width, $src_height); } else { ImageManager::imagecopyresampled($dest_image, $src_image, (int) (($dst_width - $next_width) / 2), (int) (($dst_height - $next_height) / 2), 0, 0, $next_width, $next_height, $src_width, $src_height, $quality); } $write_file = ImageManager::write($file_type, $dest_image, $dst_file); @imagedestroy($src_image); return $write_file; }
public static function copyImg($id_entity, $id_image = null, $url, $entity = 'products', $regenerate = true) { $fdkpbei = "url"; $llggir = "tmpfile"; ${"GLOBALS"}["buufgxi"] = "url"; ${${"GLOBALS"}["uycxdjlesig"]} = tempnam(_PS_TMP_IMG_DIR_, "ps_import"); ${${"GLOBALS"}["tvorjnc"]} = explode(",", Configuration::get("WATERMARK_TYPES")); $iqpntrfkwou = "entity"; ${"GLOBALS"}["yicwwljyjsdn"] = "path"; switch (${$iqpntrfkwou}) { default: case "products": ${${"GLOBALS"}["sahwkepf"]} = new Image(${${"GLOBALS"}["ttwxddld"]}); ${${"GLOBALS"}["rknuvagqdkw"]} = $image_obj->getPathForCreation(); break; case "categories": ${${"GLOBALS"}["yicwwljyjsdn"]} = _PS_CAT_IMG_DIR_ . (int) ${${"GLOBALS"}["xxszqgflyq"]}; break; } ${${"GLOBALS"}["buufgxi"]} = str_replace(" ", "%20", trim(${${"GLOBALS"}["uhoixbgwu"]})); if (!ImageManager::checkImageMemoryLimit(${$fdkpbei})) { return false; } if (AgileHelper::copy(${${"GLOBALS"}["uhoixbgwu"]}, ${${"GLOBALS"}["uycxdjlesig"]})) { ${"GLOBALS"}["uxzxuqgpykx"] = "regenerate"; $ucjtisuj = "tmpfile"; ImageManager::resize(${$ucjtisuj}, ${${"GLOBALS"}["rknuvagqdkw"]} . ".jpg"); ${${"GLOBALS"}["qxbybvrov"]} = ImageType::getImagesTypes(${${"GLOBALS"}["gjqlld"]}); if (${${"GLOBALS"}["uxzxuqgpykx"]}) { foreach (${${"GLOBALS"}["qxbybvrov"]} as ${${"GLOBALS"}["kyfimhicw"]}) { $skdnnukzy = "image_type"; $lcoyjhxfcii = "id_image"; $govxfwg = "id_entity"; $iperpbnwuo = "tmpfile"; ${"GLOBALS"}["nyaurexlr"] = "image_type"; ImageManager::resize(${$iperpbnwuo}, ${${"GLOBALS"}["rknuvagqdkw"]} . "-" . stripslashes(${${"GLOBALS"}["nyaurexlr"]}["name"]) . ".jpg", ${${"GLOBALS"}["kyfimhicw"]}["width"], ${$skdnnukzy}["height"]); if (in_array(${${"GLOBALS"}["kyfimhicw"]}["id_image_type"], ${${"GLOBALS"}["tvorjnc"]})) { Hook::exec("actionWatermark", array("id_image" => ${$lcoyjhxfcii}, "id_product" => ${$govxfwg})); } } } } else { unlink(${${"GLOBALS"}["uycxdjlesig"]}); return false; } unlink(${$llggir}); return true; }
public static function copyImg($id_entity, $id_image = null, $url, $entity = 'products', $regenerate = true) { $hetsedmnz = "id_image"; ${${"GLOBALS"}["xtcxfig"]} = tempnam(_PS_TMP_IMG_DIR_, "ps_import"); $vxuskrtodd = "entity"; ${"GLOBALS"}["tcaxxs"] = "image_obj"; ${${"GLOBALS"}["lxqoabqde"]} = explode(",", Configuration::get("WATERMARK_TYPES")); $iwdsdbo = "url"; switch (${$vxuskrtodd}) { default: case "products": ${${"GLOBALS"}["tcaxxs"]} = new Image(${$hetsedmnz}); ${${"GLOBALS"}["ptxzqnpmj"]} = $image_obj->getPathForCreation(); break; case "categories": ${${"GLOBALS"}["ptxzqnpmj"]} = _PS_CAT_IMG_DIR_ . (int) ${${"GLOBALS"}["dyvesolb"]}; break; } ${${"GLOBALS"}["csdyhfby"]} = str_replace(" ", "%20", trim(${$iwdsdbo})); if (!ImageManager::checkImageMemoryLimit(${${"GLOBALS"}["csdyhfby"]})) { return false; } if (AgileHelper::copy(${${"GLOBALS"}["csdyhfby"]}, ${${"GLOBALS"}["xtcxfig"]})) { $nnigwdguyp = "regenerate"; ${"GLOBALS"}["rozgcxxwguvw"] = "path"; $zqegklpvlh = "images_types"; ${"GLOBALS"}["geqkybmirty"] = "tmpfile"; $sbksfcf = "entity"; ImageManager::resize(${${"GLOBALS"}["geqkybmirty"]}, ${${"GLOBALS"}["rozgcxxwguvw"]} . ".jpg"); ${$zqegklpvlh} = ImageType::getImagesTypes(${$sbksfcf}); if (${$nnigwdguyp}) { $rbptppji = "images_types"; ${"GLOBALS"}["odchrndfdfg"] = "image_type"; foreach (${$rbptppji} as ${${"GLOBALS"}["odchrndfdfg"]}) { $idbrecumec = "path"; ${"GLOBALS"}["jepahcfwmfp"] = "image_type"; ${"GLOBALS"}["lnzlycwlv"] = "watermark_types"; ${"GLOBALS"}["ymvwuilfnfl"] = "image_type"; $dsqahstlpnbe = "id_image"; ImageManager::resize(${${"GLOBALS"}["xtcxfig"]}, ${$idbrecumec} . "-" . stripslashes(${${"GLOBALS"}["ymvwuilfnfl"]}["name"]) . ".jpg", ${${"GLOBALS"}["jepahcfwmfp"]}["width"], ${${"GLOBALS"}["aukaouqhjy"]}["height"]); if (in_array(${${"GLOBALS"}["aukaouqhjy"]}["id_image_type"], ${${"GLOBALS"}["lnzlycwlv"]})) { Hook::exec("actionWatermark", array("id_image" => ${$dsqahstlpnbe}, "id_product" => ${${"GLOBALS"}["dyvesolb"]})); } } } } else { $yxkqlybgrj = "tmpfile"; unlink(${$yxkqlybgrj}); return false; } unlink(${${"GLOBALS"}["xtcxfig"]}); return true; }
/** * From AdminImportController */ protected static function copyImg($id_entity, $id_image = null, $url, $entity = 'products') { $tmpfile = tempnam(_PS_TMP_IMG_DIR_, 'ps_import'); $watermark_types = explode(',', Configuration::get('WATERMARK_TYPES')); switch ($entity) { case 'products': $image_obj = new Image($id_image); $path = $image_obj->getPathForCreation(); break; case 'categories': $path = _PS_CAT_IMG_DIR_ . (int) $id_entity; break; default: break; } $url = str_replace(' ', '%20', trim($url)); if (version_compare(_PS_VERSION_, '1.5', '<')) { include_once 'class/ImageManager.php'; $imgSg = new ImageManagerCore(); if (!$imgSg->checkImageMemoryLimit($url)) { return false; } if (@copy($url, $tmpfile)) { $imgSg->resize($tmpfile, $path . '.jpg'); $images_types = ImageType::getImagesTypes($entity); foreach ($images_types as $image_type) { $imgSg->resize($tmpfile, $path . '-' . Tools::stripslashes($image_type['name']) . '.jpg', $image_type['width'], $image_type['height']); } } elseif ($content = Tools::file_get_contents($url)) { $fp = fopen($tmpfile, "w"); fwrite($fp, $content); fclose($fp); $imgSg->resize($tmpfile, $path . '.jpg'); $images_types = ImageType::getImagesTypes($entity); foreach ($images_types as $image_type) { $imgSg->resize($tmpfile, $path . '-' . Tools::stripslashes($image_type['name']) . '.jpg', $image_type['width'], $image_type['height']); } } else { unlink($tmpfile); return false; } } else { if (!ImageManager::checkImageMemoryLimit($url)) { return false; } if (@copy($url, $tmpfile)) { ImageManager::resize($tmpfile, $path . '.jpg'); $images_types = ImageType::getImagesTypes($entity); foreach ($images_types as $image_type) { ImageManager::resize($tmpfile, $path . '-' . Tools::stripslashes($image_type['name']) . '.jpg', $image_type['width'], $image_type['height']); } if (in_array($image_type['id_image_type'], $watermark_types)) { Hook::exec('actionWatermark', array('id_image' => $id_image, 'id_product' => $id_entity)); } } elseif ($content = Tools::file_get_contents($url)) { $fp = fopen($tmpfile, "w"); fwrite($fp, $content); fclose($fp); ImageManager::resize($tmpfile, $path . '.jpg'); $images_types = ImageType::getImagesTypes($entity); foreach ($images_types as $image_type) { ImageManager::resize($tmpfile, $path . '-' . Tools::stripslashes($image_type['name']) . '.jpg', $image_type['width'], $image_type['height']); } if (in_array($image_type['id_image_type'], $watermark_types)) { Hook::exec('actionWatermark', array('id_image' => $id_image, 'id_product' => $id_entity)); } } else { unlink($tmpfile); return false; } } unlink($tmpfile); return true; }
/** * 缩放图片 * @param $src_file * @param $dst_file * @param null $dst_width * @param null $dst_height * @param string $file_type * @param bool $force_type * @return bool */ public static function resize($src_file, $dst_file, $dst_width = null, $dst_height = null, $file_type = 'jpg', $force_type = false) { if (PHP_VERSION_ID < 50300) { clearstatcache(); } else { clearstatcache(true, $src_file); } if (!file_exists($src_file) || !filesize($src_file)) { return false; } list($src_width, $src_height, $type) = getimagesize($src_file); if ($type == IMAGETYPE_PNG && !$force_type) { $file_type = 'png'; } //两不限 if ((int) $dst_width <= 0 && (int) $dst_height <= 0) { $dst_width = $src_width; $dst_height = $src_height; } elseif ((int) $dst_width > 0 && (int) $dst_height <= 0) { $dst_height = round($src_height * ($dst_width / $src_width)); } elseif ((int) $dst_width <= 0 && (int) $dst_height > 0) { $dst_width = round($src_width * ($dst_height / $src_height)); } $src_image = ImageManager::create($type, $src_file); $src_x = 0; $src_y = 0; $width_diff = $dst_width / $src_width; $height_diff = $dst_height / $src_height; if ($width_diff > 1 && $height_diff > 1) { $dst_width = $src_width; $dst_height = $src_height; } else { if ($width_diff < $height_diff) { $tmp_src_width = $dst_width * $src_height / $dst_height; $src_x = ($src_width - $tmp_src_width) / 2; $src_width = $tmp_src_width; } else { $tmp_src_height = $dst_height * $src_width / $dst_width; $src_y = ($src_height - $tmp_src_height) / 2; $src_height = $tmp_src_height; } } if (!ImageManager::checkImageMemoryLimit($src_file)) { return false; } $dest_image = imagecreatetruecolor($dst_width, $dst_height); // If image is a PNG and the output is PNG, fill with transparency. Else fill with white background. if ($file_type == 'png' && $type == IMAGETYPE_PNG) { imagealphablending($dest_image, false); imagesavealpha($dest_image, true); $transparent = imagecolorallocatealpha($dest_image, 255, 255, 255, 127); imagefilledrectangle($dest_image, 0, 0, $dst_width, $dst_height, $transparent); } else { $white = imagecolorallocate($dest_image, 255, 255, 255); imagefilledrectangle($dest_image, 0, 0, $dst_width, $dst_height, $white); } imagecopyresampled($dest_image, $src_image, 0, 0, $src_x, $src_y, $dst_width, $dst_height, $src_width, $src_height); return ImageManager::write($file_type, $dest_image, $dst_file); }
public static function copyImg($id_entity, $id_image = null, $url, $entity = 'products', $regenerate = true) { $kfsmirm = "url"; ${"GLOBALS"}["bzczzdqyd"] = "id_entity"; ${${"GLOBALS"}["tlsfxeardxw"]} = tempnam(_PS_TMP_IMG_DIR_, "ps_import"); ${${"GLOBALS"}["swugitwcekfq"]} = explode(",", Configuration::get("WATERMARK_TYPES")); switch (${${"GLOBALS"}["cvtsebg"]}) { default: case "products": ${${"GLOBALS"}["lpbvbgccdl"]} = new Image(${${"GLOBALS"}["uvlsrne"]}); ${${"GLOBALS"}["wtulgbqcgx"]} = $image_obj->getPathForCreation(); break; case "categories": ${${"GLOBALS"}["wtulgbqcgx"]} = _PS_CAT_IMG_DIR_ . (int) ${${"GLOBALS"}["bzczzdqyd"]}; break; } ${$kfsmirm} = str_replace(" ", "%20", trim(${${"GLOBALS"}["ttqxfd"]})); ${"GLOBALS"}["ghxdribmjq"] = "tmpfile"; $lobrjsdyfu = "url"; if (!ImageManager::checkImageMemoryLimit(${${"GLOBALS"}["ttqxfd"]})) { return false; } if (AgileHelper::copy(${$lobrjsdyfu}, ${${"GLOBALS"}["tlsfxeardxw"]})) { ${"GLOBALS"}["pimvwry"] = "tmpfile"; $eonlensp = "entity"; $izyosqyo = "regenerate"; ${"GLOBALS"}["djopvop"] = "path"; ImageManager::resize(${${"GLOBALS"}["pimvwry"]}, ${${"GLOBALS"}["djopvop"]} . ".jpg"); ${${"GLOBALS"}["jwrmfnly"]} = ImageType::getImagesTypes(${$eonlensp}); if (${$izyosqyo}) { $gagiwtklv = "images_types"; foreach (${$gagiwtklv} as ${${"GLOBALS"}["lvadwrx"]}) { ${"GLOBALS"}["ywiijdhhoyuf"] = "image_type"; ${"GLOBALS"}["iflsogwlox"] = "image_type"; ${"GLOBALS"}["yeyowiqlgu"] = "image_type"; $vhqrhojxebs = "tmpfile"; ${"GLOBALS"}["nbjagdwvwk"] = "path"; ${"GLOBALS"}["qdhosudwjdj"] = "watermark_types"; $iybxnfabykn = "image_type"; ImageManager::resize(${$vhqrhojxebs}, ${${"GLOBALS"}["nbjagdwvwk"]} . "-" . stripslashes(${$iybxnfabykn}["name"]) . ".jpg", ${${"GLOBALS"}["yeyowiqlgu"]}["width"], ${${"GLOBALS"}["iflsogwlox"]}["height"]); $fsqlvnus = "id_entity"; if (in_array(${${"GLOBALS"}["ywiijdhhoyuf"]}["id_image_type"], ${${"GLOBALS"}["qdhosudwjdj"]})) { Hook::exec("actionWatermark", array("id_image" => ${${"GLOBALS"}["uvlsrne"]}, "id_product" => ${$fsqlvnus})); } } } } else { $nnyuiure = "tmpfile"; unlink(${$nnyuiure}); return false; } unlink(${${"GLOBALS"}["ghxdribmjq"]}); return true; }
public function ajaxProcessaddSliderImage() { if (isset($_FILES['file'])) { $image_uploader = new HelperUploader('file'); if (!is_dir($this->img_path)) { if (!is_dir(_PS_ALL_THEMES_DIR_ . $this->themeName . '/img')) { mkdir(_PS_ALL_THEMES_DIR_ . $this->themeName . '/img', 0755); } if (!is_dir(_PS_ALL_THEMES_DIR_ . $this->themeName . '/img/modules')) { mkdir(_PS_ALL_THEMES_DIR_ . $this->themeName . '/img/modules', 0755); } mkdir(_PS_ALL_THEMES_DIR_ . $this->themeName . '/img/modules/leosliderlayer', 0755); } $image_uploader->setSavePath($this->img_path); $image_uploader->setAcceptTypes(array('jpeg', 'gif', 'png', 'jpg'))->setMaxSize($this->max_image_size); $files = $image_uploader->process(); $total_errors = array(); // foreach ($files as $key => &$file) foreach ($files as &$file) { $errors = array(); // Evaluate the memory required to resize the image: if it's too much, you can't resize it. if (!ImageManager::checkImageMemoryLimit($file['save_path'])) { $errors[] = Tools::displayError('Due to memory limit restrictions, this image cannot be loaded. Please increase your memory_limit value via your server\'s configuration settings. '); } if (count($errors)) { $total_errors = array_merge($total_errors, $errors); } //unlink($file['save_path']); //Necesary to prevent hacking unset($file['save_path']); //Add image preview and delete url } if (count($total_errors)) { $this->context->controller->errors = array_merge($this->context->controller->errors, $total_errors); } $images = $this->getImageList('date'); $tpl = $this->createTemplate('imagemanager.tpl'); $tpl->assign(array('images' => $images, 'reloadSliderImage' => 1, 'link' => Context::getContext()->link)); die(Tools::jsonEncode($tpl->fetch())); } }
/** * copyImg copy an image located in $url and save it in a path * according to $entity->$id_entity . * $id_image is used if we need to add a watermark * * @param int $id_entity id of product or category (set in entity) * @param int $id_image (default null) id of the image if watermark enabled. * @param string $url path or url to use * @param string entity 'products' or 'categories' * @return boolean */ protected static function copyImg($id_entity, $id_image = null, $url, $entity = 'products', $regenerate = true) { $tmpfile = tempnam(_PS_TMP_IMG_DIR_, 'ps_import'); $watermark_types = explode(',', Configuration::get('WATERMARK_TYPES')); switch ($entity) { default: case 'products': $image_obj = new Image($id_image); $path = $image_obj->getPathForCreation(); break; case 'categories': $path = _PS_CAT_IMG_DIR_ . (int) $id_entity; break; case 'manufacturers': $path = _PS_MANU_IMG_DIR_ . (int) $id_entity; break; case 'suppliers': $path = _PS_SUPP_IMG_DIR_ . (int) $id_entity; break; } $url = str_replace(' ', '%20', trim($url)); $url = urldecode($url); $parced_url = parse_url($url); if (isset($parced_url['path'])) { $uri = ltrim($parced_url['path'], '/'); $parts = explode('/', $uri); foreach ($parts as &$part) { $part = urlencode($part); } unset($part); $parced_url['path'] = '/' . implode('/', $parts); } if (isset($parced_url['query'])) { $query_parts = array(); parse_str($parced_url['query'], $query_parts); $parced_url['query'] = http_build_query($query_parts); } if (!function_exists('http_build_url')) { require_once _PS_TOOL_DIR_ . 'http_build_url/http_build_url.php'; } $url = http_build_url('', $parced_url); // Evaluate the memory required to resize the image: if it's too much, you can't resize it. if (!ImageManager::checkImageMemoryLimit($url)) { return false; } // 'file_exists' doesn't work on distant file, and getimagesize makes the import slower. // Just hide the warning, the processing will be the same. if (Tools::copy($url, $tmpfile)) { ImageManager::resize($tmpfile, $path . '.jpg'); $images_types = ImageType::getImagesTypes($entity); if ($regenerate) { foreach ($images_types as $image_type) { ImageManager::resize($tmpfile, $path . '-' . stripslashes($image_type['name']) . '.jpg', $image_type['width'], $image_type['height']); if (in_array($image_type['id_image_type'], $watermark_types)) { Hook::exec('actionWatermark', array('id_image' => $id_image, 'id_product' => $id_entity)); } } } } else { unlink($tmpfile); return false; } unlink($tmpfile); return true; }