2016-06-30 3 views
0

이미지의 축소판을 만들 때 아래 코드를 사용하려고하지만 일부 이미지에서는 작동하지 않습니다. 아마도 즉,PHP를 사용하여 원본 이미지의 축소판을 만드는 방법

  1. 이미지는 원시로 간주됩니다. 즉 디지털 카메라에서 촬영 한 것입니다. 큰 이미지는 큰 이미지입니다. 그것은 또한 내가 걱정하는 이유

이유를 모르는 문제

  • 문제가있는 경우 // 확실하지은 나의 웹 사이트 돈에 이미지를 업로드 할 것입니다 일반 사용자 그러한 복잡성을 이해하지 못합니다. 모두는 그들이 인터넷에서 자신의 이미지를보고 싶어합니다.

    어떤 도움

    <?php 
    //define a maxim size for the uploaded images 
    define ("MAX_SIZE","100"); 
    // define the width and height for the thumbnail 
    // note that theese dimmensions are considered the maximum dimmension and are not fixed, 
    // because we have to keep the image ratio intact or it will be deformed 
    define ("WIDTH","150"); 
    define ("HEIGHT","100"); 
    
    // this is the function that will create the thumbnail image from the uploaded image 
    // the resize will be done considering the width and height defined, but without deforming the image 
    function make_thumb($img_name,$filename,$new_w,$new_h) 
    { 
    //get image extension. 
    $ext=getExtension($img_name); 
    //creates the new image using the appropriate function from gd library 
    if(!strcmp("jpg",$ext) || !strcmp("jpeg",$ext)) 
    $src_img=imagecreatefromjpeg($img_name); 
    
    if(!strcmp("png",$ext)) 
    $src_img=imagecreatefrompng($img_name); 
    
    //gets the dimmensions of the image 
    $old_x=imageSX($src_img); 
    $old_y=imageSY($src_img); 
    
    // next we will calculate the new dimmensions for the thumbnail image 
    // the next steps will be taken: 
    // 1. calculate the ratio by dividing the old dimmensions with the new ones 
    // 2. if the ratio for the width is higher, the width will remain the one define in WIDTH variable 
    // and the height will be calculated so the image ratio will not change 
    // 3. otherwise we will use the height ratio for the image 
    // as a result, only one of the dimmensions will be from the fixed ones 
    $ratio1=$old_x/$new_w; 
    $ratio2=$old_y/$new_h; 
    if($ratio1>$ratio2) { 
    $thumb_w=$new_w; 
    $thumb_h=$old_y/$ratio1; 
    } 
    else { 
    $thumb_h=$new_h; 
    $thumb_w=$old_x/$ratio2; 
    } 
    
    // we create a new image with the new dimmensions 
    $dst_img=ImageCreateTrueColor($thumb_w,$thumb_h); 
    
    // resize the big image to the new created one 
    imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y); 
    
    // output the created image to the file. Now we will have the thumbnail into the file named by $filename 
    if(!strcmp("png",$ext)) 
    imagepng($dst_img,$filename); 
    else 
    imagejpeg($dst_img,$filename); 
    
    //destroys source and destination images. 
    imagedestroy($dst_img); 
    imagedestroy($src_img); 
    } 
    
    // This function reads the extension of the file. 
    // It is used to determine if the file is an image by checking the extension. 
    function getExtension($str) { 
    $i = strrpos($str,"."); 
    if (!$i) { return ""; } 
    $l = strlen($str) - $i; 
    $ext = substr($str,$i+1,$l); 
    return $ext; 
    } 
    
    // This variable is used as a flag. The value is initialized with 0 (meaning no error found) 
    //and it will be changed to 1 if an errro occures. If the error occures the file will not be uploaded. 
    $errors=0; 
    // checks if the form has been submitted 
    if(isset($_POST['Submit'])) 
    { 
    //reads the name of the file the user submitted for uploading 
    $image=$_FILES['image']['name']; 
    // if it is not empty 
    if ($image) 
    { 
    // get the original name of the file from the clients machine 
    $filename = stripslashes($_FILES['image']['name']); 
    
    // get the extension of the file in a lower case format 
    $extension = getExtension($filename); 
    $extension = strtolower($extension); 
    // if it is not a known extension, we will suppose it is an error, print an error message 
    //and will not upload the file, otherwise we continue 
    if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png")) 
    { 
    echo '<h1>Unknown extension!</h1>'; 
    $errors=1; 
    } 
    else 
    { 
    // get the size of the image in bytes 
    // $_FILES[\'image\'][\'tmp_name\'] is the temporary filename of the file in which the uploaded file was stored on the server 
    $size=getimagesize($_FILES['image']['tmp_name']); 
    $sizekb=filesize($_FILES['image']['tmp_name']); 
    
    //compare the size with the maxim size we defined and print error if bigger 
    if ($sizekb > MAX_SIZE*4096) 
    { 
    echo '<h1>You have exceeded the size limit!</h1>'; 
    $errors=1; 
    } 
    
    //we will give an unique name, for example the time in unix time format 
    $image_name=time().'.'.$extension; 
    //the new name will be containing the full path where will be stored (images folder) 
    $newname="images/".$image_name; 
    $copied = copy($_FILES['image']['tmp_name'], $newname); 
    //we verify if the image has been uploaded, and print error instead 
    if (!$copied) 
    { 
    echo '<h1>Copy unsuccessfull!</h1>'; 
    $errors=1; 
    } 
    else 
    { 
    // the new thumbnail image will be placed in images/thumbs/ folder 
    $thumb_name='images/thumbs/thumb_'.$image_name; 
    // call the function that will create the thumbnail. The function will get as parameters 
    //the image name, the thumbnail name and the width and height desired for the thumbnail 
    $thumb=make_thumb($newname,$thumb_name,WIDTH,HEIGHT); 
    }} }} 
    
    //If no errors registred, print the success message and show the thumbnail image created 
    if(isset($_POST['Submit']) && !$errors) 
    { 
    echo "<h1>Thumbnail created Successfully!</h1>"; 
    echo '<img src="'.$thumb_name.'">'; 
    } 
    
    ?> 
    <!-- next comes the form, you must set the enctype to "multipart/form-data" and use an input type "file" --> 
    
    <form name="newad" method="post" enctype="multipart/form-data" action=""> 
    <table> 
    <tr><td><input type="file" name="image" ></td></tr> 
    <tr><td><input name="Submit" type="submit" value="Upload image"></td></tr> 
    </table> 
    

    코드 : 내 코드에서 필요하지

    모든 솔루션을 감상 할 수있다.

  • +0

    필요한 경우를 제외하고 나는'strcmp'를 피하기 위해 조언 할 것입니다. 또한'else if'를 사용하십시오. – bzeaman

    +0

    @bzeaman 내가 시도한 모든 축소판 코드는 모두 동일하게 동작합니다. 그들은 원시 이미지를 업로드하지 않습니다. 단지 오류를 표시합니다 –

    +0

    그런 다음 오류를 공유하십시오. – bzeaman

    답변

    0

    그냥

    if ($sizekb > MAX_SIZE*4096000) 
    

    한 번 시도에

    if ($sizekb > MAX_SIZE*4096) 
    

    을 변경하여 파일의 제한을 늘립니다.

    관련 문제