2014-12-18 4 views
8

मैं अपने पृष्ठ पर छवियों को अपलोड और संसाधित करने के लिए हस्तक्षेप छवि पुस्तकालय के साथ लैरवेल ढांचे का उपयोग कर रहा हूं। सब कुछ ठीक काम करता है जब तक कि मैं मोबाइल उपकरणों या कैमरों से ली गई .jpg छवियों को अपडेट करने का प्रयास नहीं करता। इन छवियों में image/jpeg के बजाय MIME प्रकार application/octet-stream है। जब मैं इस आदेश के साथ छवि अपलोड करने की कोशिश:हस्तक्षेप छवि - एमआईएमई प्रकार के साथ छवियों को कैसे अपलोड करें: एप्लिकेशन/ऑक्टेट-स्ट्रीम

Image::make($thumb)->resize($this->twidth, $this->theight)->save($this->destination."/".$filename); 

मैं त्रुटि:

Unable to read image from file 

एक असहज समाधान खुला एमएस में छवियों पेंट और सहेज कि है, जो 'छवि के लिए MIME प्रकार बदल जाएगा/jpeg 'और इसे अपलोड करना संभव बनाता है। लेकिन मैं इस समाधान को हर कीमत पर बचाना चाहता हूं।

संपादित करें:

मैं इस आदेश से इसे ठीक करने की कोशिश कर रहा था:

$img = imagecreatefromstring($thumb); 

लेकिन यह त्रुटि देता है: imagecreatefromstring(): Empty string or invalid image

वहाँ एक रास्ता छवियों के इस प्रकार संभाल करने के लिए कैसे है ?

+0

[क्या आपने पूछने से पहले SO खोजा था] (http: // stackoverflow।com/प्रश्न/5942666/php-बनाने छवि से आवेदन-ओकटेट धारा)? – dbf

+0

हां मैंने किया, लेकिन इस जवाब को –

+0

इस तरह से नहीं मिला, यह मेरे लिए काम नहीं करता –

उत्तर

0

आप इस प्रयास करें और यह Laravel

//The file post to the server 
$image = $_FILES['imgfile']; 

//array for type if octet 
$MimeType = array(
    'useNew' => false, 
    'type' => '' 
); 

if($image['type'] == "application/octet-stream"){ 
    $imageMimeSize = getimagesize($img['tmp_name']); // get temporary file REAL info 
    $MimeType['type'] = $imageMimeSize['mime']; //set in our array the correct mime 
    $MimeType['useNew'] = true; //set to true for next if 
} 

//now check if we will use the MimeType or the one sent by browser 
//$mimeCheck is the things you want to check. In my case i just wanted PNG or JPG 
if($MimeType['useNew'] == true){ //if true, use MimeType to check file/image file 
    $mimeCheckType = ($MimeType['type'] != "image/png" && $MimeType['type'] != "image/jpeg" && $MimeType['type'] != "image/jpg") && $MimeType['type'] != "image/gif"); 
}else{ //if not using real mime, go with the one device sent to us or browser sent us 
    $mimeCheckType = ($img['type'] != "image/png" && $img['type'] != "image/jpeg" && $img['type'] != "image/jpg"); 
} 

//returns error if image not png/jpg/jpeg/gif 
if($mimeCheck){ 
    //return some error 
} 

में बदलने का अधिक से दस्तावेज़ के लिए कर सकते हैं। इस लिंक पर इस यात्रा के संबंध: स्पष्ट प्रलेखन के लिए

<?php 
// Access the $_FILES global variable for this specific file being uploaded 
// and create local PHP variables from the $_FILES array of information 
$fileName = $_FILES["uploaded_file"]["name"]; // The file name 
$fileTmpLoc = $_FILES["uploaded_file"]["tmp_name"]; // File in the PHP tmp folder 
$fileType = $_FILES["uploaded_file"]["type"]; // The type of file it is 
$fileSize = $_FILES["uploaded_file"]["size"]; // File size in bytes 
$fileErrorMsg = $_FILES["uploaded_file"]["error"]; // 0 for false... and 1 for true 
$fileName = preg_replace('#[^a-z.0-9]#i', '', $fileName); // filter the $filename 
$newExt = explode(".", $fileName); // Split file name into an array using the dot 
$fileExt = end($newExt); // Now target the last array element to get the file extension 

// START PHP Image Upload Error Handling -------------------------------- 
if (!$fileTmpLoc) { // if file not chosen 
    echo "ERROR: Please browse for a file before clicking the upload button."; 
    exit(); 
} else if($fileSize > 5242880) { // if file size is larger than 5 Megabytes 
    echo "ERROR: Your file was larger than 5 Megabytes in size."; 
    unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder 
    exit(); 
} else if ($fileErrorMsg == 1) { // if file upload error key is equal to 1 
    echo "ERROR: An error occured while processing the file. Try again."; 
    exit(); 
} 
// END PHP Image Upload Error Handling ---------------------------------- 
// Place it into your "uploads" folder mow using the move_uploaded_file() function 
$moveResult = move_uploaded_file($fileTmpLoc, "uploads/$fileName"); 
// Check to make sure the move result is true before continuing 
if ($moveResult != true) { 
    echo "ERROR: File not uploaded. Try again."; 
    exit(); 
} 
// ---------- Start Universal Image Resizing Function -------- 
$target_file = "uploads/$fileName"; 
$resized_file = "uploads/resized_$fileName"; 
$wmax = 500; 
$hmax = 500; 
ak_img_resize($target_file, $resized_file, $wmax, $hmax, $fileExt); 
// ----------- End Universal Image Resizing Function ---------- 
// ---------- Start Convert to JPG Function -------- 
if (strtolower($fileExt) != "jpg") { 
    $target_file = "uploads/resized_$fileName"; 
    $new_jpg = "uploads/resized_".$newExt[0].".jpg"; 
    ak_img_convert_to_jpg($target_file, $new_jpg, $fileExt); 
} 
// ----------- End Convert to JPG Function ----------- 

echo "The file named <strong>$fileName</strong> uploaded successfuly.<br /><br />"; 
echo "It is <strong>$fileSize</strong> bytes in size.<br /><br />"; 
echo "It is an <strong>$fileType</strong> type of file.<br /><br />"; 
echo "The file extension is <strong>$fileExt</strong><br /><br />"; 
echo "The Error Message output for this upload is: $fileErrorMsg"; 
?> 

: Source document

आप जेपीईजी करने के लिए छवि इस कोशिश कन्वर्ट करने के लिए Laravel

<?php 
// Retrieve JPEG width and height without downloading/reading entire image. 
function getjpegsize($img_loc) { 
    $handle = fopen($img_loc, "rb") or die("Invalid file stream."); 
    $new_block = NULL; 
    if(!feof($handle)) { 
     $new_block = fread($handle, 32); 
     $i = 0; 
     if($new_block[$i]=="\xFF" && $new_block[$i+1]=="\xD8" && $new_block[$i+2]=="\xFF" && $new_block[$i+3]=="\xE0") { 
      $i += 4; 
      if($new_block[$i+2]=="\x4A" && $new_block[$i+3]=="\x46" && $new_block[$i+4]=="\x49" && $new_block[$i+5]=="\x46" && $new_block[$i+6]=="\x00") { 
       // Read block size and skip ahead to begin cycling through blocks in search of SOF marker 
       $block_size = unpack("H*", $new_block[$i] . $new_block[$i+1]); 
       $block_size = hexdec($block_size[1]); 
       while(!feof($handle)) { 
        $i += $block_size; 
        $new_block .= fread($handle, $block_size); 
        if($new_block[$i]=="\xFF") { 
         // New block detected, check for SOF marker 
         $sof_marker = array("\xC0", "\xC1", "\xC2", "\xC3", "\xC5", "\xC6", "\xC7", "\xC8", "\xC9", "\xCA", "\xCB", "\xCD", "\xCE", "\xCF"); 
         if(in_array($new_block[$i+1], $sof_marker)) { 
          // SOF marker detected. Width and height information is contained in bytes 4-7 after this byte. 
          $size_data = $new_block[$i+2] . $new_block[$i+3] . $new_block[$i+4] . $new_block[$i+5] . $new_block[$i+6] . $new_block[$i+7] . $new_block[$i+8]; 
          $unpacked = unpack("H*", $size_data); 
          $unpacked = $unpacked[1]; 
          $height = hexdec($unpacked[6] . $unpacked[7] . $unpacked[8] . $unpacked[9]); 
          $width = hexdec($unpacked[10] . $unpacked[11] . $unpacked[12] . $unpacked[13]); 
          return array($width, $height); 
         } else { 
          // Skip block marker and read block size 
          $i += 2; 
          $block_size = unpack("H*", $new_block[$i] . $new_block[$i+1]); 
          $block_size = hexdec($block_size[1]); 
         } 
        } else { 
         return FALSE; 
        } 
       } 
      } 
     } 
    } 
    return FALSE; 
} 
?> 

को यह फ़ॉर्मेट करने के लिए कोशिश कर सकते हैं अगर आप चरम जाना चाहते उपर्युक्त कोड

HTML 

    <div id="profilephoto" class="profilephoto" data-coupling="#content2"><img src="<?php echo $avatar ?>"></div> 
    <div id="content2" style="display: none;" class="uploadbutton" data-coupling="#content2"> 
     <form id="imguploadin" method="POST" action="image_upload_script.php"> 
      <label class="cabinet"> <i class="icon-upload-alt"></i> Choose Photo 
       <input type="file" name="uploaded_file" class="file" onchange="handleFiles(this.files)"/> 
      </label> 
     </form> 
    </div> 

jQuery/जावास्क्रिप्ट

function handleFiles(files) { 
    for (var i = 0; i < files.length; i++) { 
     var file = files[i]; 
     var imageType = /image.*/; 

     if (!file.type.match(imageType)) { 
      continue; 
     } 

     var img = document.createElement("img"); 
     img.classList.add("newphoto"); 
     img.file = file; 
     profilephoto.appendChild(img); 

     var reader = new FileReader(); 
     reader.onload = (function(aImg) { return function(e) { aImg.src = e.target.result; }; })(img); 
     reader.readAsDataURL(file); 
     var eventt = jQuery.Event("submit"); 

     $("#imguploadin").trigger(eventt); 
    } 
} 

पीएचपी (image_upload_script.php)

<?php 
session_start(); 
// Access the $_FILES global variable for this specific file being uploaded 
// and create local PHP variables from the $_FILES array of information 
$username = $_SESSION["username"]; 
$fileName = $_FILES["uploaded_file"]["name"]; // The file name 
$fileTmpLoc = $_FILES["uploaded_file"]["tmp_name"]; // File in the PHP tmp folder 
$fileType = $_FILES["uploaded_file"]["type"]; // The type of file it is 
$fileSize = $_FILES["uploaded_file"]["size"]; // File size in bytes 
$fileErrorMsg = $_FILES["uploaded_file"]["error"]; // 0 for false... and 1 for true 
$kaboom = explode(".", $fileName); // Split file name into an array using the dot 
$fileExt = end($kaboom); // Now target the last array element to get the file extension 
// START PHP Image Upload Error Handling -------------------------------------------------- 
if (!$fileTmpLoc) { // if file not chosen 
    echo "ERROR: Please browse for a file before clicking the upload button."; 
    exit(); 
} else if ($fileSize > 1242880) { // if file size is larger than 5 Megabytes 
    echo "ERROR: Your file was larger than 5 Megabytes in size."; 
    unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder 
    exit(); 
} else if (!preg_match("/.(gif|jpg|png)$/i", $fileName)) { 
    // This condition is only if you wish to allow uploading of specific file types 
    echo "ERROR: Your image was not .gif, .jpg, or .png."; 
    unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder 
    exit(); 
} else if ($fileErrorMsg == 1) { // if file upload error key is equal to 1 
    echo "ERROR: An error occured while processing the file. Try again."; 
    exit(); 
} 
// END PHP Image Upload Error Handling ---------------------------------------------------- 
// Place it into your "uploads" folder mow using the move_uploaded_file() function 
$moveResult = move_uploaded_file($fileTmpLoc, "images/users/$username.$fileExt"); 
// Check to make sure the move result is true before continuing 
if (!$moveResult) { 
    echo "ERROR: File not uploaded. Try again."; 
    unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder 
    exit(); 
} 
// ---------- Include Adams Universal Image Resizing Function -------- 
include_once("ak_php_img_lib_1.0.php"); 
$target_file = "images/users/$username.$fileExt"; 
$resized_file = "images/users/resized_$username.$fileExt"; 
$wmax = 200; 
$hmax = 150; 
ak_img_resize($target_file, $resized_file, $wmax, $hmax, $fileExt); 
$thumbnail = "images/users/thumb_$username.$fileExt"; 
$wthumb = 150; 
$hthumb = 150; 
ak_img_thumb($target_file, $thumbnail, $wthumb, $hthumb, $fileExt); 
// ----------- Write Image File path to the server --------------------------------- 
$sql_user = "myuser"; 
$sql_pass = "mypassword"; 
$sql_ip = "localhost"; 
$sql_DB = "mydb"; 
if ($moveResult != true) 
    echo("couldnt write file path to database due to unsuccesfull upload"); 
    else { 
    $mysqli = new mysqli($sql_ip, $sql_user, $sql_pass, $sql_DB); 
    if ($stmt = $mysqli->prepare("UPDATE users SET avatar=? WHERE username=?")) { 
     $user = $_SESSION['username']; 
     $avatar = $resized_file; 
     $stmt->bind_param('ss', $avatar, $user); 
     $stmt->execute(); 
     $stmt->close(); 
     //header('location: profile.html'); 
     return true; 
    } 
    $mysqli->close(); 
    } 

// ----------- End Adams Universal Image Resizing Function ----------- 
// Display things to the page so you can see what is happening for testing purposes 
echo "The file named <strong>$username.$fileExt</strong> uploaded successfuly.<br /><br />"; 
echo "It is <strong>$fileSize</strong> bytes in size.<br /><br />"; 
echo "It is an <strong>$fileType</strong> type of file.<br /><br />"; 
echo "The file extension is <strong>$fileExt</strong><br /><br />"; 
echo "The Error Message output for this upload is: $fileErrorMsg"; 
?> 

दस्तावेज़ संपादित किया गया यहाँ source

+0

मैंने इसे यहां देखा http://stackoverflow.com/a/11316048/1090395 लेकिन यह केवल तभी जांच है जब अपलोड की गई फ़ाइल पीएनजी, जेपीजी या जीआईएफ है, है ना? मैं Laravel में फ़ाइल :: mimeType ($ फ़ाइल) के साथ इतना आसान हो सकता हूं। एंड्रॉइड ऐप –

+0

से फ़ाइल अपलोड होने के बाद हमें छवि/जेपीईजी में माइम ओडी एप्लिकेशन/ऑक्टेट-स्ट्रीम को बदलने का एक तरीका चाहिए, लेकिन आप सवाल स्पष्ट नहीं हैं, आप केवल अपनी समस्या बताते हैं। मैं अब अपना उत्तर जोड़/संपादित कर दूंगा – Michael

+0

यह मेरा सवाल नहीं है, मैं केवल सही समाधान के लिए पुरस्कार दे रहा हूं। फ़ाइल को सेवर से अपलोड करने के बाद उनका प्रश्न –

0

मैं पाया जा सकता है कि कैसे आप अपनी फ़ाइल प्राप्त कर रहे हैं पर ध्यान केंद्रित करने की कोशिश करो। यह पहली बार में इस तरह का प्रयास करें:

$data = file_get_contents($_FILES['myphoto']['tmp_name']); 
$image = imagecreatefromstring($data); 

यह एक this topic पर जवाब का हवाला देते हैं।

Image::make(
    imagecreatefromstring(
     file_get_contents($_FILES['myphoto']['tmp_name']) 
    ) 
); 

// or maybe 
$img = Image::make($_FILES['myphoto']['tmp_name']); 

Intervention image manual के लिए यह काम करना चाहिए .;

यदि यह कोई उत्तर नहीं है, तो कृपया मुझे दिखाएं कि कोड क्या है जो $thumb पर मान निर्दिष्ट करता है।

संबंधित मुद्दे