我使用此PHP代码将图像从电脑上传到服务器
$ImageToLoad=mysql_real_escape_string($_POST['image_attached']);
if($ImageToLoad){
$token=$token;//variable
$ImageToLoad = str_replace('data:image/png;base64,', '', $ImageToLoad);
$ImageToLoad = str_replace('data:image/jpeg;base64,', '', $ImageToLoad);
$ImageToLoad = str_replace(' ', '+', $ImageToLoad);
$fileData = base64_decode($ImageToLoad);
$destino_path="/images/$token/image.png";
file_put_contents($destino_path, $fileData);
}
一切正常。
问题
我需要知道在将图像存储到服务器之前如何调整大小/裁剪它们。否则它保持相同的大小(巨大的图像时的问题)
答案 0 :(得分:2)
调整图像大小可能是是一项代价高昂的操作,应由专门的库处理。过去,默认指针是ImageMagick的Imagick::resizeImage。但是,这个包对每个人都不起作用,同时也出现了其他解决方案。
我建议使用gumlet' php-image-resize。调整base64编码图像的大小可以简单:
$image = ImageResize::createFromString(base64_decode('R0lGODlhAQABAIAAAAQCBP///yH5BAEAAAEALAAAAAABAAEAAAICRAEAOw=='));
$image->scale(50);
$image->save('image.jpg');
答案 1 :(得分:1)
如果我们想要从图像文件创建临时图像以进行大小调整,我们可以使用
imagecreatefromjpeg($filename);
或
imagecreatefrompng($filename);
如果我们想要从blob创建临时图像,我们可以使用
imagecreatefromstring($blob);
所以,试一试:
<?php
$filename = 'folder_name/resized_image.png'; // output file name
$im = imagecreatefromstring($fileData);
$source_width = imagesx($im);
$source_height = imagesy($im);
$ratio = $source_height / $source_width;
$new_width = 300; // assign new width to new resized image
$new_height = $ratio * 300;
$thumb = imagecreatetruecolor($new_width, $new_height);
$transparency = imagecolorallocatealpha($thumb, 255, 255, 255, 127);
imagefilledrectangle($thumb, 0, 0, $new_width, $new_height, $transparency);
imagecopyresampled($thumb, $im, 0, 0, 0, 0, $new_width, $new_height, $source_width, $source_height);
imagepng($thumb, $filename, 9);
imagedestroy($im);
?>