2014-12-18 6 views
8

Ich benutze Laravel-Framework mit Intervention Image-Bibliothek, um Bilder auf meiner Seite hochzuladen und zu verarbeiten. Alles funktioniert gut, bis ich versuche, .jpg Bilder von mobilen Geräten oder von Kameras zu aktualisieren. Diese Bilder haben MIME-Typ application/octet-stream anstelle von image/jpeg. Wenn ich versuche, mit diesem Befehl Bild hochladen:Intervention Image - wie man Bilder mit MIME-Typ hochlädt: application/octet-stream

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

ich Fehler:

Unable to read image from file 

Eine unbequeme Lösung ist offen, dass die Bilder in MS ihnen Farbe und erneut speichern, die zu ‚Bild MIME-Typ ändern/jpeg 'und ermöglichen es, sie hochzuladen. Aber ich möchte diese Lösung um jeden Preis vermeiden.

EDIT:

Ich habe versucht, es durch diesen Befehl zu beheben:

$img = imagecreatefromstring($thumb); 

aber es gibt Fehler: imagecreatefromstring(): Empty string or invalid image

Gibt es eine Möglichkeit, wie man diese Art von Bildern zu handhaben ?

+0

[Haben Sie vor der Nachfrage nach SO gesucht] (http: // stackoverflow.com/questions/5942666/php-create-image-aus-application-octet-stream)? – dbf

+0

Ja, ich tat, aber nicht diese Antwort –

+0

übrigens gefunden, funktioniert es nicht für mich –

Antwort

0

können Sie geben diesem einen Versuch und wandeln es in 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 
} 

für mehr Dok. bei diesem Besuch dieser Link: Source document

, wenn Sie Sie versuchen, diese

zu Laravel zu formatieren gehen extreme wie
<?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; 
} 
?> 

Bild zu JPEG zu konvertieren versuchen Sie dies:

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

für klarere Dokumentation des obigen Codes

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/JavaScript

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

PHP (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"; 
?> 

Das bearbeitete Dokument finden Sie hier source

+0

Ich sah es hier http://StackOverflow.com/a/11316048/1090395 Aber das ist nur die Prüfung, ob die hochgeladene Datei PNG, JPG oder GIF ist, oder? Ich kann das in Laravel mit File :: mimeType ($ file) einfacher machen. Wir brauchen hier einen Weg, um mime od Anwendung/Oktett-Stream zu Bild/JPEG zu ändern, sobald die Datei von Android App –

+0

hochgeladen wird, aber Sie Frage ist nicht klar, Sie geben nur Ihr Problem. Ich werde meine Antwort jetzt hinzufügen/bearbeiten – Michael

+0

Dies ist nicht meine Frage, ich gebe nur die Auszeichnung für die richtige Lösung. Seine Frage war ziemlich klar für mich –

0

Ich würde versuchen, sich darauf zu konzentrieren, wie Sie Ihre Datei erhalten. Versuchen Sie es auf diese Weise zuerst:

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

es sich um eine auf this topic zitieren von Antwort ist.

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

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

Ab für Intervention image manual sollte es arbeiten .;

Wenn es keine Antwort ist, bitte zeigen Sie mir, was Code ist, der $thumb Wert zuweist.

Verwandte Themen