2017-08-23 14 views
0

我的下面的代码有一些问题。我有一个任务来开发一个PHP程序,可以上传图片,然后将其转换为JPG格式,并将其大小调整为最大宽度300px或高度300px。宽高比应该与原来的相同。调整大小并使用PHP转换图像

最奇怪的是,该功能“convertImage”输出这样的事情:

����JFIF�����'�1�y�^�>�9<���H��^_������|6��a����B�����|%��^#��r�R:,������\z��c����='}U���S�s��$�bO�_��O$"���N74�����tл��ao/�8ԑ�G'�04���'��O�C��7��c1�99#8�׾}y�|�y�������3]ּg��G�t����Q��1x_����v��|8�n��^x�:mγ��[��iQ\>��]*���ĺ��-t{[��d��<-~x[���$���c������q�qӌ���d��=B9�3�<�y�;�I�תx��w�o�����~!|'��������T�7��U����~����ׇ͍5�J��M����,�kcas9�L���Ek[�f��3��랞�=pN2I�`�i���k�i�M��uBc�#���n���@rrFA�>�t�2y�|��c����׾G=r2x��xoW�M�i�5�O:[�yq$�vzu����Q-����Ok��[�Vk��V[���b�.n ��:�g T�*�*IB�)�rv�a��'�)6��vc�e9F��)4����z$��0��?��r8 ��1����3߸9�k�?�}/��oi�Ե�x�h��9��eS��!�����-tD�P��jw�} 

还与IMG标签最后的回波就不会出现在HTML,DOM。

HTML:

<form method="POST" enctype="multipart/form-data"> 
<table> 
    <tr> 
    <td> 
    <input type="file" id="pic" accept="image/*" name="pic"> 
    </td> 
    <td> 
    <input type="submit" id="send" value="Send" name="submit"> 
    </td> 
    </tr 
</table> 
</form> 

PHP:

<?php 
if(isset($_POST['submit'])) { 
$tmpName = basename($_FILES['pic']['name']; 
$size = getimagesize($tmpName); 
$donePic; 
convertImage($tmpName, $donePic, $size); 
echo '<img src="data:image/jpeg;base64,'.base64_encode($donePic).'"/>'; 
} 
?> 

功能convertImage

function convertImage($original, $output, $size) { 
     //jpg, png, gif, bmp 
     $ext = $size['mime']; 

     if (preg_match('/jpg|jpeg/i', $ext)) 
      $imageTemp = imagecreatefromjpeg($original); 
     else if (preg_match('/png/i', $ext)) 
      $imageTemp = imagecreatefrompng($original); 
     else if (preg_match('/gif/i', $ext)) 
      $imageTemp = imagecreatefromgif($original); 
     else if (preg_match('/bmp/i', $ext)) 
      $imageTemp = imagecreatefromwbmp($original); 
     else 
      return 0; 

     $ratio = $size[0]/$size[1]; // width/height 
     if ($ratio > 1) { 
      $width = 300; 
      $heigth = 300/$ratio; 
     } else { 
      $width = 300*$ratio; 
      $heigth = 300; 
     }  

     $resizedImg = imagecreatetruecolor($width, $heigth); 
     imagecopyresampled($resizedImg, $imageTemp, 0,0,0,0,$width, $heigth, $size[0], $size[1]); 
     imagedestroy($imageTemp); 

     imagejpeg($resizedImg, $output); 
     imagedestroy($resizedImg); 

     return 1; 
    } 

如果您需要任何其他信息,随时问我。

谢谢大家!

+2

'$ output'在'imagejpeg'是不是你认为它是。它应该是一个带有文件路径或开放资源流的字符串。如果此值为空,则图像通量将直接发送到浏览器。因为你的参数是一个非集合的变量,所以它被理解为null,并且你得到最后一种情况,这就是为什么你有这个意外的输出 – Kaddath

回答

0

我在Kaddath的帮助下解决了我的问题。谢谢!

我不得不将代码从

imagedestroy($imageTemp); 
imagejpeg($resizedImg, $output); 
imagedestroy($resizedImg); 

改变

imagedestroy($imageTemp); 

//starting an output buffer to get the data 
ob_start(); 

imagejpeg($resizedImg); 

//here we get the data 
$output = ob_get_clean(); 

imagedestroy($resizedImg); 
0

请参考下面链接在PHP中调整图像大小。

https://code.tutsplus.com/tutorials/image-resizing-made-easy-with-php--net-10362