Some improvements and fixes for webgui
This commit is contained in:
@@ -43,3 +43,73 @@ function dir_get_size($path) {
|
||||
}
|
||||
return $total;
|
||||
}
|
||||
|
||||
function image_scale($imagefile, $mimetype, $width, $height, $factor) {
|
||||
// scales down image in place
|
||||
// returns size in bytes for new scaled image or -1 in case of error
|
||||
global $g_message, $g_error;
|
||||
|
||||
if ($factor <= 0 || $factor >= 1) {
|
||||
$g_error->Add("Internal error: Invalid image scale factor");
|
||||
return -1;
|
||||
}
|
||||
$width = (int)($width * $factor);
|
||||
$height = (int)($height * $factor);
|
||||
if ($width < 1 || $height < 1) {
|
||||
$g_error->Add("Internal error: Scaled image dimensions are too small");
|
||||
return -1;
|
||||
}
|
||||
if ($mimetype == 'image/jpeg') {
|
||||
$orig = imagecreatefromjpeg($imagefile);
|
||||
if ($orig === false) {
|
||||
$g_error->Add("Internal error: imagecreatefromjpeg failed");
|
||||
return -1;
|
||||
}
|
||||
$scaled = imagescale($orig, $width, $height, IMG_BICUBIC); // TODO IMG_BICUBIC_FIXED?
|
||||
if ($scaled === false) {
|
||||
imagedestroy($orig);
|
||||
$g_error->Add("Internal error: jpeg imagescale failed");
|
||||
return -1;
|
||||
}
|
||||
if (!imagejpeg($scaled, $imagefile, 85)) {
|
||||
imagedestroy($scaled);
|
||||
imagedestroy($orig);
|
||||
$g_error->Add("Internal error: imagejpeg failed");
|
||||
return -1;
|
||||
}
|
||||
} else if ($mimetype == 'image/png') {
|
||||
$orig = imagecreatefrompng($imagefile);
|
||||
if ($orig === false) {
|
||||
$g_error->Add("Internal error: imagecreatefrompng failed");
|
||||
return -1;
|
||||
}
|
||||
$scaled = imagescale($orig, $width, $height, IMG_BICUBIC);
|
||||
if ($scaled === false) {
|
||||
imagedestroy($orig);
|
||||
$g_error->Add("Internal error: png imagescale failed");
|
||||
return -1;
|
||||
}
|
||||
// Preserve PNG transparency
|
||||
imagealphablending($scaled, false);
|
||||
imagesavealpha($scaled, true);
|
||||
if (!imagepng($scaled, $imagefile, 9)) {
|
||||
imagedestroy($scaled);
|
||||
imagedestroy($orig);
|
||||
$g_error->Add("Internal error: imagepng failed");
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
$g_error->Add(sprintf(_('Internal error: Unknown mimetype %s!'), $mimetype));
|
||||
return -1;
|
||||
}
|
||||
$g_message->add(sprintf(_('Image scaled down to %dx%d'), $width, $height));
|
||||
imagedestroy($scaled);
|
||||
imagedestroy($orig);
|
||||
clearstatcache(true, $imagefile);
|
||||
$size = filesize($imagefile);
|
||||
if ($size === false) {
|
||||
$g_error->Add("Internal error: filesize failed");
|
||||
return -1;
|
||||
}
|
||||
return $size;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user