<?php
class ImageResampler {
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); }
/* * */
}
}
PD9waHAKCmNsYXNzIEltYWdlUmVzYW1wbGVyIHsKICAgZnVuY3Rpb24gY3JlYXRlVGh1bWJuYWlsICgkaW1hZ2VfZmlsZSwgJHRuX2ZpbGUsICRtYXhfd2lkdGgsICRtYXhfaGVpZ2h0ID0gMCwgJHdoYXQyZG8gPSAnVE4nLCAkb3V0cHV0X2Zvcm1hdCA9ICcnKSB7CgogICAgICAgaWYgKCFmaWxlX2V4aXN0cyAoJGltYWdlX2ZpbGUpKSByZXR1cm47CiAgICAgICBpZiAoISR0bl9maWxlKSByZXR1cm47CgogICAgICAgJGltYWdlX2ZpbGVfZXh0ID0gJyc7IGlmIChzdHJycG9zICgkaW1hZ2VfZmlsZSwgJy4nKSkgJGltYWdlX2ZpbGVfZXh0ID0gc3Vic3RyICgkaW1hZ2VfZmlsZSwgc3RycnBvcyAoJGltYWdlX2ZpbGUsICcuJykpOwogICAgICAgJHRuX2ZpbGVfZXh0ID0gJyc7IGlmIChzdHJycG9zICgkdG5fZmlsZSwgJy4nKSkgJHRuX2ZpbGVfZXh0ID0gc3Vic3RyICgkdG5fZmlsZSwgc3RycnBvcyAoJHRuX2ZpbGUsICcuJykpOwoKICAgICAgICRpbWdfcGljdHVyZSA9ICcnOwogICAgICAgaWYgKCRpbWFnZV9maWxlX2V4dCA9PSAnLmpwZycpICRpbWdfcGljdHVyZSA9IGltYWdlQ3JlYXRlRnJvbUpQRUcgKCRpbWFnZV9maWxlKTsKICAgICAgIGlmICgkaW1hZ2VfZmlsZV9leHQgPT0gJy5wbmcnKSAkaW1nX3BpY3R1cmUgPSBpbWFnZUNyZWF0ZUZyb21QTkcgKCRpbWFnZV9maWxlKTsKICAgICAgIGlmICgkaW1hZ2VfZmlsZV9leHQgPT0gJy5naWYnKSAkaW1nX3BpY3R1cmUgPSBpbWFnZUNyZWF0ZUZyb21HSUYgKCRpbWFnZV9maWxlKTsKICAgICAgIGlmICghJGltZ19waWN0dXJlKSByZXR1cm47CgogICAgICAgJHNpemUgPSBnZXRJbWFnZVNpemUgKCRpbWFnZV9maWxlKTsKICAgICAgIGlmICghaXNfYXJyYXkgKCRzaXplKSkgcmV0dXJuOwoKICAgICAgICR3aWR0aCA9ICRzaXplWzBdOyBpZiAoISR3aWR0aCkgcmV0dXJuOwogICAgICAgJGhlaWdodCA9ICRzaXplWzFdOyBpZiAoISRoZWlnaHQpIHJldHVybjsKCiAgICAgICAvKiAqICovCgogICAgICAgaWYgKCEkbWF4X2hlaWdodCkgJG1heF9oZWlnaHQgPSAkbWF4X3dpZHRoICogMTAyNDsKCiAgICAgICAkcmVxdWlyZWRfd2lkdGggPSAkd2lkdGg7CiAgICAgICAkcmVxdWlyZWRfaGVpZ2h0ID0gJGhlaWdodDsKCiAgICAgICBmb3IgKCR6b29tID0gMDsgJHpvb20gPD0gMTAwMDsgJHpvb20gKyspIHsKICAgICAgICAgICAgaWYgKCRyZXF1aXJlZF93aWR0aCA8PSAkbWF4X3dpZHRoICYmCiAgICAgICAgICAgICAgICAkcmVxdWlyZWRfaGVpZ2h0IDw9ICRtYXhfaGVpZ2h0KSBicmVhazsKCiAgICAgICAgICAgIGlmICgkem9vbSA9PSAwKSB7CiAgICAgICAgICAgICAgICAkcmVxdWlyZWRfd2lkdGggPSAoaW50KSAoJHdpZHRoIC8gMyAqIDIpOwogICAgICAgICAgICAgICAgJHJlcXVpcmVkX2hlaWdodCA9IChpbnQpICgkaGVpZ2h0IC8gMyAqIDIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHJlcXVpcmVkX3dpZHRoID0gKGludCkgKCR3aWR0aCAvICR6b29tKTsKICAgICAgICAgICAgICAgICRyZXF1aXJlZF9oZWlnaHQgPSAoaW50KSAoJGhlaWdodCAvICR6b29tKTsKICAgICAgICAgICAgfQogICAgICAgfQogICAgICAgdW5zZXQgKCR6b29tKTsKCiAgICAgICBpZiAoJHdoYXQyZG8gPT0gJ0lNRycgJiYgJHJlcXVpcmVkX3dpZHRoID09ICR3aWR0aCkgcmV0dXJuOwoKICAgICAgICRpbWdfcmVzYW1wbGVkID0gaW1hZ2VDcmVhdGVUcnVlQ29sb3IgKCRyZXF1aXJlZF93aWR0aCwgJHJlcXVpcmVkX2hlaWdodCk7CiAgICAgICBpbWFnZUNvcHlSZXNhbXBsZWQgKCRpbWdfcmVzYW1wbGVkLCAkaW1nX3BpY3R1cmUsIDAsIDAsIDAsIDAsICRyZXF1aXJlZF93aWR0aCwgJHJlcXVpcmVkX2hlaWdodCwgJHdpZHRoLCAkaGVpZ2h0KTsKCiAgICAgICBpZiAoZmlsZV9leGlzdHMgKCR0bl9maWxlKSkgdW5saW5rICgkdG5fZmlsZSk7CgogICAgICAgaWYgKCRvdXRwdXRfZm9ybWF0ICYmICRvdXRwdXRfZm9ybWF0ID09ICdQTkcnKSB7CiAgICAgICAgICAgJHRuX2ZpbGUgPSBzdHJyZXBsYWNlICgkdG5fZmlsZSwgJHRuX2ZpbGVfZXh0LCAnLnBuZycpOwoKICAgICAgICAgICBpbWFnZVBORyAoJGltZ19yZXNhbXBsZWQsICR0bl9maWxlKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgJHF1YWxpdHkgPSAxOwogICAgICAgICAgIGlmICgkd2hhdDJkbyA9PSAnVE4nKSAkcXVhbGl0eSA9IDc1OwogICAgICAgICAgIGlmICgkd2hhdDJkbyA9PSAnSU1HJykgJHF1YWxpdHkgPSA5NTsKCiAgICAgICAgICAgJHRuX2ZpbGUgPSBzdHJyZXBsYWNlICgkdG5fZmlsZSwgJHRuX2ZpbGVfZXh0LCAnLmpwZycpOwoKICAgICAgICAgICBpbWFnZUpQRUcgKCRpbWdfcmVzYW1wbGVkLCAkdG5fZmlsZSwgJHF1YWxpdHkpOwogICAgICAgfQoKICAgICAgIC8qICogKi8KCiAgICAgICBpbWFnZURlc3Ryb3kgKCRpbWdfcmVzYW1wbGVkKTsgdW5zZXQgKCRpbWdfcmVzYW1wbGVkKTsKICAgICAgIGltYWdlRGVzdHJveSAoJGltZ19waWN0dXJlKTsgdW5zZXQgKCRpbWdfcGljdHVyZSk7CiAgIH0KfQ==