كيفية إنشاء صورة مصغرة من ملف .bmp؟
-
27-09-2019 - |
سؤال
أنا أستعمل imagecreatefromjpeg
, imagecreatefromgif
, ، و imagecreatefrompng
وظائف لإنشاء صورة مصغرة من image/jpeg
, image/gif
, ، و image/png
MIMES.
أود أيضًا إنشاء صور مصغرة من .BMP
الملفات.
راجعت ملفًا واحدًا واكتشفت أن MIME image/x-ms-bmp
.
ومع ذلك ، لا يمكنني العثور على مناسبة imagecreatefrom...
وظيفة.
الرجاء الاقتراح.
المحلول
PHP لا يحتوي على وظائف الصورة في BMP.
كانت هناك بعض المحاولات لإنشاء وظائف للقيام بذلك.
يمكنك العثور على نسخة قوية وموثقة جيدًا في هذا التعليق في وثائق PHP: http://www.php.net/manual/en/function.imagecreatefromwbmp.php#86214
فيما يلي الوظيفة من هذا التعليق دون الوثائق الممتازة التي تضع وقتًا أطول ولكنها قابلة للقراءة أكثر من ذلك بكثير:
public function imagecreatefrombmp($p_sFile)
{
$file = fopen($p_sFile,"rb");
$read = fread($file,10);
while(!feof($file)&&($read<>""))
$read .= fread($file,1024);
$temp = unpack("H*",$read);
$hex = $temp[1];
$header = substr($hex,0,108);
if (substr($header,0,4)=="424d")
{
$header_parts = str_split($header,2);
$width = hexdec($header_parts[19].$header_parts[18]);
$height = hexdec($header_parts[23].$header_parts[22]);
unset($header_parts);
}
$x = 0;
$y = 1;
$image = imagecreatetruecolor($width,$height);
$body = substr($hex,108);
$body_size = (strlen($body)/2);
$header_size = ($width*$height);
$usePadding = ($body_size>($header_size*3)+4);
for ($i=0;$i<$body_size;$i+=3)
{
if ($x>=$width)
{
if ($usePadding)
$i += $width%4;
$x = 0;
$y++;
if ($y>$height)
break;
}
$i_pos = $i*2;
$r = hexdec($body[$i_pos+4].$body[$i_pos+5]);
$g = hexdec($body[$i_pos+2].$body[$i_pos+3]);
$b = hexdec($body[$i_pos].$body[$i_pos+1]);
$color = imagecolorallocate($image,$r,$g,$b);
imagesetpixel($image,$x,$height-$y,$color);
$x++;
}
unset($body);
return $image;
}
نصائح أخرى
ماذا عن شيء مثل هذا الرجل يصف:
يوجد مشروع OpenSource ، PHP Image Magician ، يتيح لك قراءة ملفات BMP وكتابةها. انظر هنا: https://stackoverflow.com/a/11531747/577306