Re: Reading only RGB portion of an image, file_get_conents minus file headers etc

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 23 January 2012 14:34, Matijn Woudt <tijnema@xxxxxxxxx> wrote:
> On Mon, Jan 23, 2012 at 3:26 PM, Nicholas Cooper <nicholas@xxxxxxxxxxxxx> wrote:
>> On 23 January 2012 13:26, Matijn Woudt <tijnema@xxxxxxxxx> wrote:
>>> On Mon, Jan 23, 2012 at 1:51 PM, Nicholas Cooper <nicholas@xxxxxxxxxxxxx> wrote:
>>>> Hi everyone,
>>>>
>>>> I've created an image in RGB from ImageMagick, it's 4 by 4 so I'm
>>>> expecting 48 numbers (4*4*3). [width*height*(R,G,B)]
>>>>
>>>> When I read the file with PHP and unpack it I get between 330 and 333,
>>>> I guess this difference is down to headers and end of file data.  Is
>>>> there anyway to access only the useful image bits, those 48 numbers?
>>>>
>>>> Thank you,
>>>>
>>>> Nicholas Cooper
>>>>
>>>
>>> Hi,
>>>
>>> The easiest way is probably using imagecolorat[1]. Just do a nested
>>> for loop over x and y values, and call imagecolorat for each pixel.
>>>
>>> Matijn
>>>
>>> [1] www.php.net/imagecolorat
>>
>> Thank you that does the trick and gives the expected output.  I plan
>> to be processing a large number of images and have always been wary of
>> using the built in image functions for performance reasons.  So if
>> there is any other solutions I'm welcome to them, or even if someone
>> just wants to say that performance is not such an issue any more.
>
>
> If the image you want to process is a simple bitmap (.bmp) file, then
> you can easily parse it yourself. Wikipedia has a page on the file
> format [1].
>
> In short, fopen your file, fseek to 0x000A, read 4 bytes, and parse
> them as little-endian (with unpack or so). fseek to that value, and
> then you can read 4*4*3 bytes with fseek. That is your RGB data, if it
> is in that format ofcourse. If you're not sure which format they are
> you might need to parse more of the BMP header, but that's up to you.
>
> Matijn
>
> [1] http://en.wikipedia.org/wiki/BMP_file_format

Thank you, I haven't quite managed to find the start of my 16 bytes,
but I get the idea, so I should be able to get this working after
reading more about the format.

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php




[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux