서버 측에 유효한 이미지 파일을 만들어야하는 PHP 스크립트가 있습니다. 다음 코드는 잘 실행 :이 $ 파일 이름을 가진 이미지가 생성되는 미세 & 작동PHP로 문자열을 이미지로 변환
$filename = $_GET['filename'];
// Only proceed if we got valid input
if ($filename !== null) {
echo "$filename is not null.";
$image = @imagecreatetruecolor(10, 10)
or die('Cannot Initialize new GD image stream');
if (strpos($image, '/gif') !== false) {
$image_type = "GIF";
header('Content-Type: image/gif');
$successful = imagegif($image, "./$filename");
} else if (strpos($image, '/jpeg') !== false) {
$image_type = "JPG";
header('Content-Type: image/jpeg');
$successful = imagejpeg($image, "./$filename");
} else if (strpos($image, '/png') !== false) {
$image_type = "PNG";
header('Content-Type: image/png');
$successful = imagepng($image, "./$filename");
}
if ($successful) {
echo "Image written to '$filename'.";
} else {
echo "Could not write $image_type image to '$filename'.";
}
imagedestroy($image);
echo "image destroyed.";
} else {
echo "$filename is null.";
}
. 그러나 사실, 파일 이름뿐만 아니라 이미지도 수신해야합니다. 그래서, 나는에서 만드는 방법을 실제 코드는
$filename = $_GET['filename'];
$image = $_GET['image'];
echo "file $filename = '$image'.";
// Only proceed if we got valid input
if ($filename !== null) {
echo "$filename is not null.";
if (strpos($image, '/gif') !== false) {
$image_type = "GIF";
header('Content-Type: image/gif');
$successful = imagegif($image, "./$filename");
} else if (strpos($image, '/jpeg') !== false) {
$image_type = "JPG";
header('Content-Type: image/jpeg');
$successful = imagejpeg($image, "./$filename");
} else if (strpos($image, '/png') !== false) {
$image_type = "PNG";
header('Content-Type: image/png');
$successful = imagepng($image, "./$filename");
}
if ($successful) {
echo "Image written to '$filename'.";
} else {
echo "Could not write $image_type image to '$filename'.";
}
imagedestroy($image);
echo "image destroyed.";
} else {
echo "$filename is null.";
}
이 작동하지 않습니다이며, 결과는
file t.png = 'data:image/jpeg;base64,/9j/4AAQSkZJ … qA/Cz//Z'.t.png is not null.Image written to 't.png'.image destroyed.
입니다 '데이터 : 이미지/JPEG를 ...'문자열은 PHP에서 유효한 이미지?
EDIT 1
// Only proceed if we got valid input
if ($filename !== null) {
echo "$filename is not null.";
$image = base64_decode($image); // <<<<
EDIT 2 : 파일이되도록 I 코드를 수정는 I 위가 another question의 중복 가능성이 아니라는 것을 확인하기 위해 코드에 한 줄씩 추가 삭제됨 :
$filename = $_GET['filename'];
$image = $_GET['image'];
// Only proceed if we got valid input
if ($filename !== null) {
echo "$filename is not null.";
$image = base64_decode($image);
$slash1 = strpos($image, '/');
$image_type = substr($image, $slash1, strpos($image, ';') - $slash1);
if (file_exists($filename)) unlink($filename);
header('Content-Type: image/' . $image_type);
switch ($image_type) {
case "gif":
$successful = imagegif($image, "./$filename");
break;
case "jpeg":
case "jpg":
$successful = imagejpeg($image, "./$filename");
break;
case "png":
$successful = imagepng($image, "./$filename");
break;
}
if ($successful) {
echo "Image written to '$filename'.";
} else {
echo "Could not write $image_type image to '$filename'.";
}
imagedestroy($image);
echo "image destroyed.";
} else {
echo "$filename is null.";
}
그래도 답변은 Could not write image to 't.jpg'
입니다.
편집 3 :이 내가 두 개의 매개 변수로 전달할 것입니다 :
?filename=t.jpg&image=data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAEAAAAAAAD/7AARRHVja3kAAQAEAAAAPAAA/+0ALFBob3Rvc2hvcCAzLjAAOEJJTQQlAAAAAAAQAAAAAAAAAAAAAAAAAAAAAP/bAEMAAgEBAgEBAgICAgICAgIDBQMDAwMDBgQEAwUHBgcHBwYHBwgJCwkICAoIBwcKDQoKCwwMDAwHCQ4PDQwOCwwMDP/bAEMBAgICAwMDBgMDBgwIBwgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIAAEAAQMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APA6KKK/qA/Cz//Z
EDIT 4 :는 @ delboy1978uk의 제안에 따라 코드를 수정. 당신은 이미 출력을 전송 한 페이지에 헤더를 보내려고
$filename = $_GET['filename'];
$image = $_GET['image'];
echo "file $filename = '$image'.";
// Only proceed if we got valid input
if ($filename !== null) {
$slash = strpos($image, '/') + 1;
$image_type = substr($image, $slash, strpos($image, ';') - $slash);
$comma = strpos($image, ',') + 1;
$image = substr($image, $comma);
$decoded_image = base64_decode($image);
$image = imagecreatefromstring($decoded_image);
echo "The image type is '$image_type'.";
if (file_exists($filename)) {
unlink($filename);
echo "Deleted file '$filename'.";
}
header('Content-Type: image/' . $image_type);
$filename .= '.' . $image_type;
switch ($image_type) {
case "gif":
$successful = imagegif($image, "./$filename");
break;
case "jpeg":
case "jpg":
$successful = imagejpeg($image, "./$filename");
break;
case "png":
$successful = imagepng($image, "./$filename");
break;
}
if ($successful) {
echo "Image written to '$filename'.";
} else {
echo "Could not write $image_type image to '$filename'.";
}
if (imagedestroy($image) === true) {
echo "Image destroyed.";
}
} else {
echo "$filename is null.";
}
가능한 중복 (HTTPS를 [데이터 URL에서 이미지 만들기] : // 유래.com/questions/4672392/create-image-from-data-url) – iainn