Speaking of GD, there is a very troubling problem that I have never found a straight answer to. The imagettfbbox function uses the baseline of the font for it's bounding box. What good is a bounding box without the decenders? Now if this were a simple calculation it wouldn't be so bad, but that doesn't seem to be the case. I have yet to be able to (or find an example of) calculating an accurate bounding box for any given text/font/angle/pointsize right down to the pixel on every side. Some come close, but that's not acceptible to a web page designer ;-) Is this a problem with GD itself, or something with the font files, or PHP's imagettfbox functionality? Is this something that could be "fixed"?
TIA Monte Sterling Hughes wrote: > Dmitry, > > Sorry, for the length of my reply, and now the fact that I'm just > refferring you to another source. I'm actually not responsible for the > gd library (at least since I last checked :). Your help would > definitely be appreciated, I've forwarded this request to > [EMAIL PROTECTED] which is the developers mailing list. If you > would like to work on the gd extension, please feel free to apply for a > cvs account at: http://www.php.net/cvs-php.php > > Thanks, > Sterling > > >>Hello, >> >>I have recently learned that GD library is being integrated into >>PHP, and apparently you have some relation to that. >> >>While GD library has a very good set of functions, the >>implementation is very poor in my opinion. The code is quite >>redundant and un-optimized in any way. This probably has to be >>addressed to the author of GD, but since it is now going to be >>part of PHP, may be some apparent optimization can be applied to >>the bundled version. >> >>My concerns raised when I tried to use ImageCopyResampled >>function. It nearly brings my server to its knees due to high >>memory and processor usage (when running 15-20 Apache processes >>each processing some image via ImageCopyResampled in PHP). The >>processing time is also very high - typically around 10 seconds >>for 1 calls to ImageCopyResampled with 1-2 megapixel images. >> >>Of course, those numbers relate to my server, people with faster >>computers may get better results. >> >>By in any case, I decided to look into implementation of >>gdImageCopyResampled in GD library and saw lots of this that can >>be improved. I did not look into other function, but I suspect >>this is true for the whole GD library. >> >>The function uses brute force approach and many values that can >>be calculated in the outer loop or outside of any loops are >>being calculated in the inner loop. E.g. >> >>sy1 = ((float) y - (float) dstY) * (float) srcH / (float) dstH; >>sy2 = ((float) (y + 1) - (float) dstY) * (float) srcH / (float) dstH; >>is being calculated for each x, while it really needs to be calculated for each y. >> >>This part is a constant: >> >>(float) dstY * (float) srcH / (float) dstH >> >>and therefore can be calculated once per call, not dstW*dstH*2 times. >> >>Similarly, >> >> int pd = gdImageGetPixel (dst, x, y); >> >>is being called inside of the inner loop (dstW*dstH times!) = but >>is not being used anywhere later! >> >>Applying some apparent mathematics, we can calculate the final >>spixels value in one easy step, rather than using (potentially) >>multiple floating point additions and multiplications in the inner loop (spixels >>+= xportion * yportion). Instead total spixels value for the current (x,y) can be >found as >> >>spixels = (y2-y1)* (x2-x1); // and, again, this can also be optimized further >> >>I can point out several other things that can be easily improved, but you got my >point already. >> >>It is possible to reduce number of calculation dramatically, without breaking >readability and/or >>compatibility. >> >>I am wondering if anyone is considering to do this any time soon. I would be more >than willing >>to discuss my suggestions with someone responsible for this library, or even modify >the code >>myself (a little bit harder for me, since I have little time to make extensive >tests). >> >>Regards, >>Dmitry >> >>-- >>Dmitry Petrov >>phone: (212) 641-3235 >>pager: [EMAIL PROTECTED] >> >> >>-- >> >>*** DISCLAIMER *** >> >>This message is intended only for the use of the individual >>or entity to which it is addressed and may contain information >>that is privileged, confidential and exempt from disclosure >>under applicable law. If the reader of this message is not >>the intended recipient or the employee or agent responsible >>for delivering the message to the intended recipient, you are >>hereby notified that any dissemination, distribution or copying >>of this communication is strictly prohibited. If you have received >>this message in error, please notify the sender by reply >>transmission and delete the message. >>------------------ >> >> > > -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php