|
|
|
สอบถามเรื่องการสร้างรูปกราฟฟิก GD(Graphics Draw) หน่อยครับ |
|
|
|
|
|
|
|
สอบถามเรื่องการสร้างรูปกราฟฟิก GD(Graphics Draw) หน่อยครับ
ทำไมรูปมันไม่โชว์ครับ ตามรูปเลยครับ มันต้องไปInstall อะไรเพิ่มหรือป่าวครับ
ขอบคุณครับ
Header('Content-type: image/png');
$img = imagecreate(300, 300);
imagefill($img, 0, 0, imagecolorallocate($img, 220, 220, 220));
$red = rand(0, 255);
$green = rand(0, 255);
$blue = rand(0, 255);
$color = imagecolorallocate($img, $red, $green, $blue);
imageline($img, 25, 25, 275, 275, $color);
imageline($img, 275, 25, 25, 275, $color);
imagerectangle($img, 25, 25, 275, 275, $color);
imageellipse($img, 150, 150, 250, 250, $color);
Tag : PHP
|
|
|
|
|
|
Date :
2020-04-26 21:39:15 |
By :
teedesign |
View :
637 |
Reply :
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองเปลี่ยน encoding ของไฟล์ php เป็น ANSI ดูครับ
|
|
|
|
|
Date :
2020-04-26 23:43:00 |
By :
PhrayaDev |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คำสั่งส่งออกเป็นภาพล่ะครับ
imagepng($img);
|
|
|
|
|
Date :
2020-04-27 07:17:49 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 2 เขียนโดย : Chaidhanan เมื่อวันที่ 2020-04-27 07:17:49
รายละเอียดของการตอบ ::
... ใส่ความคิดเห็นตรงนี้.......
ขออภัยครับ ตอนโพสต์ Copy มาไม่หมดครับ เป็นหน้าจอดำเหมือนเดิมครับ
Code (PHP)
Header('Content-type: image/jpeg');
$img = imagecreate(300, 300);
imagefill($img, 0, 0, imagecolorallocate($img, 220, 220, 220));
$red = rand(0, 255);
$green = rand(0, 255);
$blue = rand(0, 255);
$color = imagecolorallocate($img, $red, $green, $blue);
imageline($img, 25, 25, 275, 275, $color);
imageline($img, 275, 25, 25, 275, $color);
imagerectangle($img, 25, 25, 275, 275, $color);
imageellipse($img, 150, 150, 250, 250, $color);
imagejpeg($img);
|
ประวัติการแก้ไข 2020-04-27 08:21:33 2020-04-27 08:24:54 2020-04-27 08:30:49 2020-04-27 08:33:08
|
|
|
|
Date :
2020-04-27 08:20:53 |
By :
teedesign |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตามที่บอกไป ปกติ php ที่เขียนอย่าง professional มัก(ง่าย) กำหนด Encode page เป็น UTF-8...ซึ่งส่งผลกระทบโดยตรงเพราะจะมีหัว marker แถมมาก่อน output byte ของ image content ทำให้ php เข้าใจว่าเนื้อหารูปภาพเป็นแบบ text/html...จึงเป็นที่มาว่าทำไมต้องตั้ง php encode เป็น ANSI(อย่างน้อยในไฟล์ที่ใช้ GD library)
ไม่งั้นก็ใส่ ob_clean(); ก่อน header() เพื่อเคลียร์ output buffer ก่อน
|
ประวัติการแก้ไข 2020-04-27 11:20:31
|
|
|
|
Date :
2020-04-27 11:18:12 |
By :
PhrayaDev |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มันไม่จำเป็นต้อง ansi หรอกครับ ให้ utf-8 น่ะดีแล้วจะได้รองรับกับ unicode ส่วนอื่นๆทั้งระบบ.
กรณีที่มีหัวออกมาก่อนอย่างที่ว่า มันเป็นเพราะ UTF-8 with BOM (ถ้าใช้ windows notepad มักจะเป็น).
ให้ตรวจหรือแก้ใน notepad ด้วยการ save as UTF-8 without BOM (UTF-8 เฉยๆ ใน Windows 10 - จากที่เห็น).
กรณีที่แน่ใจแล้วว่าไม่มี BOM ก็ต้องตรวจการ echo หรือการใช้ปนๆมั่วๆ html+php ที่บางคนเขาใช้กัน อย่างเช่น
Code (PHP)
<html>
<?php
//...
?>
</html>
อย่างนี้มันก็กำหนด header อะไรไม่ได้เลย มันจะ header already sent อยู่เรื่อย.
ถ้าการกำหนด header() ผ่านฉลุย, กำหนด php.ini ให้แจ้ง error ทุกระดับแบบละเอียดยิบๆแล้ว รันแล้ว ไม่มีแจ้งอะไร ก็แสดงว่าทุกอย่างผ่าน ไม่มีการ output ออกมาก่อนกำหนด. ปัญหาที่เหลือจะอยู่ที่อื่นครับ.
|
ประวัติการแก้ไข 2020-04-27 20:19:04
|
|
|
|
Date :
2020-04-27 20:18:10 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับได้แล้วครับ Clear Browwer ก็โชว์แล้วครับเส้นผมบังภูเขา
<?php
header('Content-type: image/jpeg');
$img = imagecreate(300, 300);
imagefill($img, 0, 0, imagecolorallocate($img, 220, 220, 220));
$red = rand(0, 255);
$green = rand(0, 255);
$blue = rand(0, 255);
$color = imagecolorallocate($img, $red, $green, $blue);
imageline($img, 25, 25, 275, 275, $color);
imageline($img, 275, 25, 25, 275, $color);
imagerectangle($img, 25, 25, 275, 275, $color);
imageellipse($img, 150, 150, 250, 250, $color);
imagejpeg($img);
?>
|
ประวัติการแก้ไข 2020-04-27 20:26:07
|
|
|
|
Date :
2020-04-27 20:23:46 |
By :
teedesign |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไหนๆได้แล้ว ขออนุญาตแนบความรู้เพิ่มเติมจากที่ทดลองเมื่อสักครู่.
ถ้ากำหนด header content-type เป็นรูปแล้ว เช่น image/png, image/jpg แต่ไม่มีเนื้อหาอะไรเลย มันก็จะขึ้นว่า
Quote:The image cannot be displayed because it contains errors
กรณีนี้ถ้าสงสัย ให้ไล่ comment code header content type เลย
ตัวอย่าง...
Code (PHP)
//header('Content-Type: image/jpg');
$img = imagecreate(300, 300) OR die('imagecreate is failed.');
imagefill($img, 0, 0, imagecolorallocate($img, 220, 220, 220)) OR die('imagefill is failed.');
$red = rand(0, 255);
$green = rand(0, 255);
$blue = rand(0, 255);
$color = imagecolorallocate($img, $red, $green, $blue);
imageline($img, 25, 25, 275, 275, $color);
imageline($img, 275, 25, 25, 275, $color);
imagerectangle($img, 25, 25, 275, 275, $color);
imageellipse($img, 150, 150, 250, 250, $color);
จากตัวอย่างข้างบน มันจะยังไม่แสดงผลรูปออกมา ไม่มีอะไรเลย หน้าว่างๆแต่ก็ไม่ error (display error หมดแล้ว) แสดงว่าปัญหามาจากอย่างที่ว่าจริง คือมี header content type image แต่ไม่มีเนื้อหา เพราะโค้ดข้างบน(ยกเว้น header()) ไม่มี error อะไรออกมา.
แต่เมื่อใส่ imagejpeg($img); เข้าไป และเปิดใช้ header content type มันก็แสดงรูปออกมาปกติครับ.
เผื่อใครมีปัญหาอย่างนี้อีก php มันไม่เจาะจง error ให้ ให้สงสัยไว้ก่อนว่าเนื้อหารูปไม่มีตรงกับ header content type.
|
|
|
|
|
Date :
2020-04-27 20:39:28 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 01
|