غير قادر على إنشاء مورد صورة GD من BMP مع نوع MIME "Image/X-MS-BMP" في PHP

StackOverflow https://stackoverflow.com/questions/2100875

  •  21-09-2019
  •  | 
  •  

سؤال

أحاول إنشاء مورد صورة GD من صورة BMP ، لكنني لا أحالف.

تم إنشاء صورة BMP المعنية وحفظها باستخدام Photoshop. لقد جربت اثنين من BMPs وجدته على الويب أيضًا ، وأعطوا نفس النتائج.

يخبرني GetImagesize () أن صورة BMP تحتوي على نوع صورة من ImageType_BMP (6) ونوع MIME من "Image/X-MS-BMP".

لقد حاولت تشغيل الصورة من خلال MechanceCreateFromWBMP () و MechanceCreateFromxBm () ، ولكن لا يتعرف عليها. لقد حاولت أيضًا تشغيله من خلال MechanceCreateFromString () ، لكن هذا القول الأخضر "البيانات ليست بتنسيق معترف بها".

أقوم بتشغيل XAMPP على جهاز Windows مع PHP 5.3.1 و GD 2.0.34 مع تمكين دعم WBMP و XBM. لقد جربت هذا أيضًا على خادم Linux الذي يقوم بتشغيل PHP 5.2.6 و GD 2.0.34 مع تمكين دعم WBMP و XBM ، نفس النتيجة.

أي أفكار كيف يمكنني إنشاء مورد صورة GD من BMP هذا؟ هل هو في الواقع ممكن؟

هل كانت مفيدة؟

المحلول

على حد علمي ، فإنه لا يدعم صور BMP. ال imagecreatefromwbmp() الطريقة هي للتعامل مع ملفات BITMAPS اللاسلكية (WBMP) ، وليس BMP العادية التي لديك هناك. ال imagecreatefromxbm() هو للتعامل مع تنسيق XBM (مرة أخرى ، يختلف عن BMP).

أود أن أعمل حول هذا من خلال إعادة فتح Photoshop وإعادة توفير PNG أو JPG. على افتراض أنك قمت بتثبيت/تجميع PHP مع الدعم المناسب ، ستتمكن من العمل مع واحد أو كلا من تنسيقات الصور هذه بشكل جيد.

نصائح أخرى

يوجد مشروع OpenSource جديد على Github يسمح بقراءة وحفظ ملفات BMP (وتنسيقات الملفات الأخرى) في PHP. إنه سهل الاستخدام.

يسمى المشروع PHP صورة الساحر.

الحل الذي تبحث عنه هنا:http://tr.php.net/imagecreate

قم بالتمرير أدناه إلى التعليقات للعثور على الوظيفة المسمى "MeacheCreateFrombMP"سوف يساعدك ذلك على إنشاء صور من صور BMP.

بمجرد إنشاء الصورة ، يمكنك استخدام ImageJpeg () وظيفة لحفظ الصورة بتنسيق JPEG.

يبدو أنني أتذكر التعلم منذ زمن طويل أن GD لا يدعم تنسيق BMP.

هنا رابط وجدته للتو.

على الرغم من وجود بعض الالتباس حول ملفات WBMP ، إلا أنه كان منذ زمن طويل.

هذا الجدول الزمني من Delicious.com يشير إلى أنه ربما كان عام 2005.

استخدام الوظيفة:

function imagecreatefrombmp( $filename )
{
    $file = fopen( $filename, "rb" );
    $read = fread( $file, 10 );
    while( !feof( $file ) && $read != "" )
    {
        $read .= fread( $file, 1024 );
    }
    $temp = unpack( "H*", $read );
    $hex = $temp[1];
    $header = substr( $hex, 0, 104 );
    $body = str_split( substr( $hex, 108 ), 6 );
    if( substr( $header, 0, 4 ) == "424d" )
    {
        $header = substr( $header, 4 );
        // Remove some stuff?
        $header = substr( $header, 32 );
        // Get the width
        $width = hexdec( substr( $header, 0, 2 ) );
        // Remove some stuff?
        $header = substr( $header, 8 );
        // Get the height
        $height = hexdec( substr( $header, 0, 2 ) );
        unset( $header );
    }
    $x = 0;
    $y = 1;
    $image = imagecreatetruecolor( $width, $height );
    foreach( $body as $rgb )
    {
        $r = hexdec( substr( $rgb, 4, 2 ) );
        $g = hexdec( substr( $rgb, 2, 2 ) );
        $b = hexdec( substr( $rgb, 0, 2 ) );
        $color = imagecolorallocate( $image, $r, $g, $b );
        imagesetpixel( $image, $x, $height-$y, $color );
        $x++;
        if( $x >= $width )
        {
            $x = 0;
            $y++;
        }
    }
    return $image;
}

مصدرhttp://php.net/manual/ru/function.imagecreatefromwbmp.php

قدم PHP 7.2 دعم BMP في مكتبة GD: ImageBMP, MeacheCreateFrombMP.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top