2013-03-08 22 views
7

Tôi hiện đang làm như sau để giải mã hình ảnh base64 trong PHP:Làm thế nào tôi có thể dải dữ liệu: phần hình ảnh từ một chuỗi base64 của bất kỳ loại hình ảnh trong PHP

$img = str_replace('data:image/jpeg;base64,', '', $s['image']); 
    $img = str_replace('data:image/png;base64,', '', $s['image']); 
    $img = str_replace('data:image/gif;base64,', '', $s['image']); 
    $img = str_replace('data:image/bmp;base64,', '', $s['image']); 
    $img = str_replace(' ', '+', $img); 
    $data = base64_decode($img); 

Như bạn thấy ở trên, chúng tôi được chấp nhận bốn loại hình ảnh tiêu chuẩn nhất (jpeg, png, gif, bmp);

Tuy nhiên, một số hình ảnh này rất lớn và quét qua mỗi lần 4-5 lần với str_replace có vẻ như một chất thải khủng khiếp và cực kỳ kém hiệu quả.

Có cách nào tôi có thể phân tách dữ liệu một cách đáng tin cậy: phần hình ảnh của chuỗi hình ảnh base64 trong một lần truyền không? Có lẽ bằng cách phát hiện dấu phẩy đầu tiên trong chuỗi?

Lời xin lỗi của tôi nếu đây là một vấn đề đơn giản, PHP không phải là sở trường của tôi. Cảm ơn trước.

Trả lời

24

Bạn có thể sử dụng một biểu thức chính quy:

$img = preg_replace('#data:image/[^;]+;base64,#', '', $s['image']); 

nếu văn bản bạn đang thay thế là văn bản đầu tiên trong hình ảnh, thêm ^ vào đầu của regexp sẽ làm cho nó nhanh hơn nhiều, bởi vì nó đã giành' t phân tích toàn bộ hình ảnh, chỉ cần vài ký tự đầu tiên:

$img = preg_replace('#^data:image/[^;]+;base64,#', '', $s['image']); 
+0

Bạn lấy bánh! – TFennis

+0

Hoàn hảo! Mặc dù tất cả các câu trả lời đều tốt và hoạt động hoàn hảo. Dường như phương pháp của bạn là nhanh nhất, do đó tôi sẽ trao cho bạn câu trả lời ngay sau khi tôi có thể. Cảm ơn nhiều. :) – gordyr

+0

@gordyr bạn được chào đón –

0

Bạn sẽ phải kiểm tra nó nhưng tôi nghĩ rằng giải pháp này nên hơi nhanh hơn Mihai Iorga của

$offset = str_pos($s['image'], ','); 
$data = base64_decode(substr($s['image'], $offset)); 
11

Chức năng file_get_contents xóa tiêu đề và sử dụng base64_decode, để bạn có được hình ảnh nội dung rõ ràng.

Hãy thử mã này:

$img = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA0gA...'; 
$imageContent = file_get_contents($img); 
+1

đây phải là câu trả lời được chấp nhận. giải pháp rất thông minh! – raphael

+0

Điều này chắc chắn sẽ là câu trả lời được chấp nhận, một giải pháp thanh lịch hơn nhiều –

Các vấn đề liên quan