function ResampleImage($file_dir, $file_name, $size, $delete = false, $quality) { $dot = strrpos($file_name, '.'); $fext = substr($file_name, $dot); switch (strtolower($fext)) { case '.jpeg': // расширение не поддерживается: // расширение не поддерживается: case '.jpg': if (!function_exists('ImageCreateFromJPEG')) { return false; } break; case '.gif': if (!function_exists('ImageCreateFromGIF')) { return false; } break; case '.png': if (!function_exists('ImageCreateFromPNG')) { return false; } break; default: return false; } $img_size = @GetImageSize($file_dir . '/' . $file_name); if ($img_size[2] > 3) { return false; } # 1-GIF;2-JPG;3-PNG if (isset($size[1])) { $new_size = ImageSize2($img_size, $size[0], $size[1]); } else { $new_size = ImageSize2($img_size, $size[0]); } if ($img_size[0] == $new_size[0] && $img_size[1] == $new_size[1]) { $ret = $file_dir . '/' . $file_name; return imgpath($ret); # No changes needed } switch ($img_size[2]) { case 1: $src = @ImageCreateFromGIF($file_dir . '/' . $file_name); break; case 2: $src = @ImageCreateFromJPEG($file_dir . '/' . $file_name); break; case 3: $src = @ImageCreateFromPNG($file_dir . '/' . $file_name); break; } if (!$src) { return $file_name; } if ($img_size[2] != '1' && function_exists('ImageCreateTrueColor')) { # GIF не поддерживается $dst = ImageCreateTrueColor($new_size[0], $new_size[1]); ImageCopyResampled($dst, $src, 0, 0, 0, 0, $new_size[0], $new_size[1], $img_size[0], $img_size[1]); } else { $dst = ImageCreateTrueColor($new_size[0], $new_size[1]); $trans_color = imagecolorallocate($dst, 255, 0, 0); $color = imagecolorallocate($dst, 255, 255, 255); imagecolortransparent($dst, $trans_color); ImageCopyResized($dst, $src, 0, 0, 0, 0, $new_size[0], $new_size[1], $img_size[0], $img_size[1]); } if (!$delete) { switch ($img_size[2]) { case 1: ImageGIF($dst, $file_dir . '/' . $file_name . '1'); break; case 2: ImageJPEG($dst, $file_dir . '/' . $file_name . '1', $quality); break; case 3: ImagePNG($dst, $file_dir . '/' . $file_name . '1'); break; } } else { switch ($img_size[2]) { case 1: ImageGIF($dst, $file_dir . '/' . $file_name); break; case 2: ImageJPEG($dst, $file_dir . '/' . $file_name, $quality); break; case 3: ImagePNG($dst, $file_dir . '/' . $file_name); break; } } ImageDestroy($src); ImageDestroy($dst); $new_name = new_file_name($file_name, "_" . $size[0]); if (file_exists($file_dir . '/' . $new_name)) { $num = 1; while (file_exists($file_dir . '/' . new_file_name($file_name, '[' . $num . ']' . "_" . $size[0]))) { $num++; } $new_name = new_file_name($file_name, '[' . $num . ']' . "_" . $size[0]); } if (!$delete) { rename($file_dir . '/' . $file_name . '1', $file_dir . '/' . $new_name); } else { rename($file_dir . '/' . $file_name, $file_dir . '/' . $new_name); } $ret = $file_dir . '/' . $new_name; return imgpath($ret); }
function EditDownload() { $dir = get("down_dir", 'null', 'gp'); $vdir = $this->verifyDir($dir); if (!is_array($vdir)) { $vdir = $this->getStartDir(); } $dir = $vdir['dir']; $width = get("width", 0, 'gp'); $height = get("height", 0, 'gp'); $file = isset($_FILES['file']) ? $_FILES['file'] : ""; if ($width != 0 || $height != 0) { $size = array($width, $height); } if (!empty($file)) { # находим несуществующее имя $file_name = GetPureName($file['name']); # уменьшаем рассширение файла, для номрального просмотра в fm $dot = strrpos($file_name, '.'); $ext = strtolower(substr($file_name, $dot, strlen($file_name) - $dot)); if (in_array($ext, $this->deny)) { echo "<script>alert('Вы не можете закачивать файлы с таким расширением.');</script>"; return; } $file_name = substr($file_name, 0, $dot) . $ext; if (file_exists($this->SlashSep($dir, $file_name))) { $num = 1; while (file_exists($this->SlashSep($dir, new_file_name($file_name, '[' . $num . ']')))) { $num++; } $file_name = new_file_name($file_name, '[' . $num . ']'); } $file_put = $this->SlashSep($dir, $file_name); if (!move_uploaded_file($file['tmp_name'], $file_put)) { echo "<script>alert('Ошибка загрузки файла');</script>"; } @chmod($file_put, FILES_MOD); @chown($file_put, fileowner($_SERVER['SCRIPT_FILENAME'])); @chgrp($file_put, filegroup($_SERVER['SCRIPT_FILENAME'])); # Ресайз if (!empty($size)) { $quality = sql_getValue('SELECT value FROM strings WHERE name="resize_quality" AND module="site" AND root_id=' . domainRootId() . ' AND lang="' . lang() . '"'); if (!$quality) { $quality = 85; } $file_name = ResampleImage($dir, $file_name, $size, false, $quality); } if (get('watermark', false, 'gp')) { $data = $this->config; $watermark = $data['module']['watermark_file']; if (!is_file(".." . $watermark)) { echo "<script>alert('Не найден файл с водяным знаком!');</script>"; die; } $this->addWaterMark($file_name, ".." . $watermark); } } echo "\n\t\t<script>\n\t\tparent.openDir('" . $dir . "');\n\t\tparent.hideDownloadFrom();\n\t\tparent.stopMainLoad();\n\t\t</script>\n\t\t"; }