使用php

时间:2018-06-09 15:09:00

标签: php

我使用此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);

}

一切正常。

问题

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

2 个答案:

答案 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);

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);
?>