rainmotorsports
Well-known member
I need to run png images through this class to extract a block of text stored in them. Been using it for awhile in a php script but now that its time to use it for a xenforo addon I am running into trouble.
The original code is:
Previously called like:
One of the things I tried was renaming the class tbg_pbss_reader and then placing the file at /library/tbg/pbss/reader.php and changing function __construct to public function __construct.
No matter what I do the closest I get is an error ErrorException: Undefined index: IHDR tripping off this line:
The original code is:
Code:
class PNG_Reader
{
private $_chunks;
private $_fp;
function __construct($file) {
if (!file_exists($file)) {
throw new Exception('File does not exist');
}
$this->_chunks = array ();
// Open the file
$this->_fp = fopen($file, 'r');
if (!$this->_fp)
throw new Exception('Unable to open file');
// Read the magic bytes and verify
$header = fread($this->_fp, 8);
if ($header != "\x89PNG\x0d\x0a\x1a\x0a")
throw new Exception('Is not a valid PNG image');
// Loop through the chunks. Byte 0-3 is length, Byte 4-7 is type
$chunkHeader = fread($this->_fp, 8);
while ($chunkHeader) {
// Extract length and type from binary data
$chunk = @unpack('Nsize/a4type', $chunkHeader);
// Store position into internal array
if ($this->_chunks[$chunk['type']] === null)
$this->_chunks[$chunk['type']] = array ();
$this->_chunks[$chunk['type']][] = array (
'offset' => ftell($this->_fp),
'size' => $chunk['size']
);
// Skip to next chunk (over body and CRC)
fseek($this->_fp, $chunk['size'] + 4, SEEK_CUR);
// Read next chunk header
$chunkHeader = fread($this->_fp, 8);
}
}
function __destruct() { fclose($this->_fp); }
// Returns all chunks of said type
public function get_chunks($type) {
if ($this->_chunks[$type] === null)
return null;
$chunks = array ();
foreach ($this->_chunks[$type] as $chunk) {
if ($chunk['size'] > 0) {
fseek($this->_fp, $chunk['offset'], SEEK_SET);
$chunks[] = fread($this->_fp, $chunk['size']);
} else {
$chunks[] = '';
}
}
return $chunks;
}
}
Previously called like:
Code:
$png = PNG_Reader('$filename);
$rawTextData = $png->get_chunks('tEXt');
One of the things I tried was renaming the class tbg_pbss_reader and then placing the file at /library/tbg/pbss/reader.php and changing function __construct to public function __construct.
No matter what I do the closest I get is an error ErrorException: Undefined index: IHDR tripping off this line:
Code:
if ($this->_chunks[$chunk['type']] === null)
Last edited: