<?php
/**
* Уменьшение изображений до заданного размера.
*/
class ImageResampler {
public function createThumbnail ($image_file, $tn_file, $max_width, $max_height = 0, $what2do = 'TN', $output_format = '') {
if (!$tn_file) return;
$image_file_ext = ''; if (strrpos ($image_file, '.')) $image_file_ext = substr ($image_file, strrpos ($image_file, '.')); $tn_file_ext = ''; if (strrpos ($tn_file, '.')) $tn_file_ext = substr ($tn_file, strrpos ($tn_file, '.'));
$img_picture = '';
if (!$img_picture) return;
$width = $size[0]; if (!$width) return;
$height = $size[1]; if (!$height) return;
/* * */
if (!$max_height) $max_height = $max_width * 1024;
$required_width = $width;
$required_height = $height;
for ($zoom = 0; $zoom <= 1000; $zoom ++) {
if ($required_width <= $max_width &&
$required_height <= $max_height) break;
if ($zoom == 0) {
$required_width = (int) ($width / 3 * 2);
$required_height = (int) ($height / 3 * 2);
} else {
$required_width = (int) ($width / $zoom);
$required_height = (int) ($height / $zoom);
}
}
if ($what2do == 'IMG' && $required_width == $width) return;
imageCopyResampled ($img_resampled, $img_picture, 0, 0, 0, 0, $required_width, $required_height, $width, $height);
if ($output_format && $output_format == 'PNG') {
$tn_file = strreplace ($tn_file, $tn_file_ext, '.png');
} else {
$quality = 1;
if ($what2do == 'TN') $quality = 75;
if ($what2do == 'IMG') $quality = 95;
$tn_file = strreplace ($tn_file, $tn_file_ext, '.jpg');
imageJPEG ($img_resampled, $tn_file, $quality); }
/* * */
}
}
?>
PD9waHAKLyoqCiAqICDQo9C80LXQvdGM0YjQtdC90LjQtSDQuNC30L7QsdGA0LDQttC10L3QuNC5INC00L4g0LfQsNC00LDQvdC90L7Qs9C+INGA0LDQt9C80LXRgNCwLgogKi8KCmNsYXNzIEltYWdlUmVzYW1wbGVyIHsKICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVRodW1ibmFpbCAoJGltYWdlX2ZpbGUsICR0bl9maWxlLCAkbWF4X3dpZHRoLCAkbWF4X2hlaWdodCA9IDAsICR3aGF0MmRvID0gJ1ROJywgJG91dHB1dF9mb3JtYXQgPSAnJykgewoKICAgICAgIGlmICghZmlsZV9leGlzdHMgKCRpbWFnZV9maWxlKSkgcmV0dXJuOwogICAgICAgaWYgKCEkdG5fZmlsZSkgcmV0dXJuOwoKICAgICAgICRpbWFnZV9maWxlX2V4dCA9ICcnOyBpZiAoc3RycnBvcyAoJGltYWdlX2ZpbGUsICcuJykpICRpbWFnZV9maWxlX2V4dCA9IHN1YnN0ciAoJGltYWdlX2ZpbGUsIHN0cnJwb3MgKCRpbWFnZV9maWxlLCAnLicpKTsKICAgICAgICR0bl9maWxlX2V4dCA9ICcnOyBpZiAoc3RycnBvcyAoJHRuX2ZpbGUsICcuJykpICR0bl9maWxlX2V4dCA9IHN1YnN0ciAoJHRuX2ZpbGUsIHN0cnJwb3MgKCR0bl9maWxlLCAnLicpKTsKCiAgICAgICAkaW1nX3BpY3R1cmUgPSAnJzsKICAgICAgIGlmICgkaW1hZ2VfZmlsZV9leHQgPT0gJy5qcGcnKSAkaW1nX3BpY3R1cmUgPSBpbWFnZUNyZWF0ZUZyb21KUEVHICgkaW1hZ2VfZmlsZSk7CiAgICAgICBpZiAoJGltYWdlX2ZpbGVfZXh0ID09ICcucG5nJykgJGltZ19waWN0dXJlID0gaW1hZ2VDcmVhdGVGcm9tUE5HICgkaW1hZ2VfZmlsZSk7CiAgICAgICBpZiAoJGltYWdlX2ZpbGVfZXh0ID09ICcuZ2lmJykgJGltZ19waWN0dXJlID0gaW1hZ2VDcmVhdGVGcm9tR0lGICgkaW1hZ2VfZmlsZSk7CiAgICAgICBpZiAoISRpbWdfcGljdHVyZSkgcmV0dXJuOwoKICAgICAgICRzaXplID0gZ2V0SW1hZ2VTaXplICgkaW1hZ2VfZmlsZSk7CiAgICAgICBpZiAoIWlzX2FycmF5ICgkc2l6ZSkpIHJldHVybjsKCiAgICAgICAkd2lkdGggPSAkc2l6ZVswXTsgaWYgKCEkd2lkdGgpIHJldHVybjsKICAgICAgICRoZWlnaHQgPSAkc2l6ZVsxXTsgaWYgKCEkaGVpZ2h0KSByZXR1cm47CgogICAgICAgLyogKiAqLwoKICAgICAgIGlmICghJG1heF9oZWlnaHQpICRtYXhfaGVpZ2h0ID0gJG1heF93aWR0aCAqIDEwMjQ7CgogICAgICAgJHJlcXVpcmVkX3dpZHRoID0gJHdpZHRoOwogICAgICAgJHJlcXVpcmVkX2hlaWdodCA9ICRoZWlnaHQ7CgogICAgICAgZm9yICgkem9vbSA9IDA7ICR6b29tIDw9IDEwMDA7ICR6b29tICsrKSB7CiAgICAgICAgICAgIGlmICgkcmVxdWlyZWRfd2lkdGggPD0gJG1heF93aWR0aCAmJgogICAgICAgICAgICAgICAgJHJlcXVpcmVkX2hlaWdodCA8PSAkbWF4X2hlaWdodCkgYnJlYWs7CgogICAgICAgICAgICBpZiAoJHpvb20gPT0gMCkgewogICAgICAgICAgICAgICAgJHJlcXVpcmVkX3dpZHRoID0gKGludCkgKCR3aWR0aCAvIDMgKiAyKTsKICAgICAgICAgICAgICAgICRyZXF1aXJlZF9oZWlnaHQgPSAoaW50KSAoJGhlaWdodCAvIDMgKiAyKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRyZXF1aXJlZF93aWR0aCA9IChpbnQpICgkd2lkdGggLyAkem9vbSk7CiAgICAgICAgICAgICAgICAkcmVxdWlyZWRfaGVpZ2h0ID0gKGludCkgKCRoZWlnaHQgLyAkem9vbSk7CiAgICAgICAgICAgIH0KICAgICAgIH0KICAgICAgIHVuc2V0ICgkem9vbSk7CgogICAgICAgaWYgKCR3aGF0MmRvID09ICdJTUcnICYmICRyZXF1aXJlZF93aWR0aCA9PSAkd2lkdGgpIHJldHVybjsKCiAgICAgICAkaW1nX3Jlc2FtcGxlZCA9IGltYWdlQ3JlYXRlVHJ1ZUNvbG9yICgkcmVxdWlyZWRfd2lkdGgsICRyZXF1aXJlZF9oZWlnaHQpOwogICAgICAgaW1hZ2VDb3B5UmVzYW1wbGVkICgkaW1nX3Jlc2FtcGxlZCwgJGltZ19waWN0dXJlLCAwLCAwLCAwLCAwLCAkcmVxdWlyZWRfd2lkdGgsICRyZXF1aXJlZF9oZWlnaHQsICR3aWR0aCwgJGhlaWdodCk7CgogICAgICAgaWYgKGZpbGVfZXhpc3RzICgkdG5fZmlsZSkpIHVubGluayAoJHRuX2ZpbGUpOwoKICAgICAgIGlmICgkb3V0cHV0X2Zvcm1hdCAmJiAkb3V0cHV0X2Zvcm1hdCA9PSAnUE5HJykgewogICAgICAgICAgICR0bl9maWxlID0gc3RycmVwbGFjZSAoJHRuX2ZpbGUsICR0bl9maWxlX2V4dCwgJy5wbmcnKTsKCiAgICAgICAgICAgaW1hZ2VQTkcgKCRpbWdfcmVzYW1wbGVkLCAkdG5fZmlsZSk7CiAgICAgICB9IGVsc2UgewogICAgICAgICAgICRxdWFsaXR5ID0gMTsKICAgICAgICAgICBpZiAoJHdoYXQyZG8gPT0gJ1ROJykgJHF1YWxpdHkgPSA3NTsKICAgICAgICAgICBpZiAoJHdoYXQyZG8gPT0gJ0lNRycpICRxdWFsaXR5ID0gOTU7CgogICAgICAgICAgICR0bl9maWxlID0gc3RycmVwbGFjZSAoJHRuX2ZpbGUsICR0bl9maWxlX2V4dCwgJy5qcGcnKTsKCiAgICAgICAgICAgaW1hZ2VKUEVHICgkaW1nX3Jlc2FtcGxlZCwgJHRuX2ZpbGUsICRxdWFsaXR5KTsKICAgICAgIH0KCiAgICAgICAvKiAqICovCgogICAgICAgaW1hZ2VEZXN0cm95ICgkaW1nX3Jlc2FtcGxlZCk7IHVuc2V0ICgkaW1nX3Jlc2FtcGxlZCk7CiAgICAgICBpbWFnZURlc3Ryb3kgKCRpbWdfcGljdHVyZSk7IHVuc2V0ICgkaW1nX3BpY3R1cmUpOwogICB9Cn0KPz4=