使用php调整大小或裁剪base64图像

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (226)

我正在使用这个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);

}

它运行正常。

问题

在将图像存储到服务器之前,我需要知道如何调整它/裁剪它们。否则它保持相同的大小(当巨大的图像时出现问题)

提问于
用户回答回答于

如果我们想要从图像文件创建临时图像以进行大小调整,我们可以使用

imagecreatefromjpeg($filename);

或者

imagecreatefrompng($filename);

如果我们想要从blob创建临时图像,我们可以使用

imagecreatefromstring($blob);

imagecreatefromstring()

所以,尝试:

<?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);
?>
用户回答回答于

调整图像大小可能是一项代价高昂的操作,应由专门的库处理。在过去,默认指针是ImageMagick的Imagick :: resizeImage。但是,这个包对每个人都不起作用,同时也出现了其他解决方案。

我建议使用gumlet的php-image-resize。调整base64编码图像的大小可以简单:

$image = ImageResize::createFromString(base64_decode('R0lGODlhAQABAIAAAAQCBP///yH5BAEAAAEALAAAAAABAAEAAAICRAEAOw=='));
$image->scale(50);
$image->save('image.jpg');

扫码关注云+社区

领取腾讯云代金券