473,486 Members | 2,401 Online
Bytes | Software Development & Data Engineering Community
Create Post

Home Posts Topics Members FAQ

imagerotate problem with PHP 4.3.9 - PHP 5.2.0 using GD2

Recap:

Using imagerotate within PHP 4.3.9 - PHP 5.2.0 for both XP and Linux,
all using GD2

If you rotate an image 180 degrees, all is fine

If you rotate an image 0 degrees and < 180 degrees, or 180 degrees
and < 360 degrees, while the image will rotate, its dimensions are
somehow not refactored and as a result you get a rather annoying black
bar in the newly-rotated image, along with part of your image being
cropped off.

I learned about a possible workaround with ImageMagick's convert
command, but has anyone found a better solution (other than using XP's
built-in image rotation routines)?

Thanks
Phil

Jun 20 '07 #1
4 2531
Rik
On Wed, 20 Jun 2007 15:45:03 +0200, comp.lang.php
<ph**************@gmail.comwrote:
Recap:

Using imagerotate within PHP 4.3.9 - PHP 5.2.0 for both XP and Linux,
all using GD2

If you rotate an image 180 degrees, all is fine

If you rotate an image 0 degrees and < 180 degrees, or 180 degrees
and < 360 degrees, while the image will rotate, its dimensions are
somehow not refactored and as a result you get a rather annoying black
bar in the newly-rotated image, along with part of your image being
cropped off.

I learned about a possible workaround with ImageMagick's convert
command, but has anyone found a better solution (other than using XP's
built-in image rotation routines)?
Depends on what you want from it, how would you like it to behave on
arbitrary angle? Calculate the width & height needed for the new image,
create that, set the backgroundcolor of your choice on it, and paste the
image in it & rotate.
--
Rik Wasmus
Jun 20 '07 #2
On Jun 20, 10:02 am, Rik <luiheidsgoe...@hotmail.comwrote:
On Wed, 20 Jun 2007 15:45:03 +0200, comp.lang.php

<phillip.s.pow...@gmail.comwrote:
Recap:
Using imagerotate within PHP 4.3.9 - PHP 5.2.0 for both XP and Linux,
all using GD2
If you rotate an image 180 degrees, all is fine
If you rotate an image 0 degrees and < 180 degrees, or 180 degrees
and < 360 degrees, while the image will rotate, its dimensions are
somehow not refactored and as a result you get a rather annoying black
bar in the newly-rotated image, along with part of your image being
cropped off.
I learned about a possible workaround with ImageMagick's convert
command, but has anyone found a better solution (other than using XP's
built-in image rotation routines)?

Depends on what you want from it, how would you like it to behave on
arbitrary angle? Calculate the width & height needed for the new image,
create that, set the backgroundcolor of your choice on it, and paste the
image in it & rotate.
I did that after imagerotate misbehaved the first time, however, it
seems as if imagerotate ignored the newly-calculated height and weight
options.

Say for instance you have an image of 300 x 150. If you rotate 90
degrees the image should be 150 x 300 with the image contents
perfectly rotated. Instead you have an image of 150 x 300 with a big
black bar on the right. This in spite of recalculating the correct
height and width for the new image.
>
--
Rik Wasmus- Hide quoted text -

- Show quoted text -

Jun 20 '07 #3
Here is a visual example of what I mean.

Here is my original image:

http://valsignalandet.com/images/testshot.jpg

After I do this:
PHP Code:
if (!function_exists('imagerecreatetruecolor')) {
/**
* Recreate an existing image as a true color image {@link
http://us2.php.net/manual/en/functio...tate.php#62530 See notes
in imagerotate() for more information}
*
* @access public
* @param resource $image (reference)
* @return resource $image
*/
function &imagerecreatetruecolor(&$image) {
if (!imageistruecolor($image) &&
function_exists('imagecreatetruecolor')) {
list($width, $height) = array(@imagesx($image), @imagesy($image));
$tempImage = @imagecreatetruecolor($width, $height);
@imagecopy($tempImage, $image, 0, 0, 0, 0, $width, $height);
$image = $tempImage;
}
return $image;
}
}
/
*------------------------------------------------------------------------
---------------------------------------------------------------------------
Block to perform actions based upon checks. If you are to add text
you
will do a "imagefttext" function call;
if you are to add a border you will instantiate an
ImageBorderGenerator
class object; if you are to grayscale the
image you are to use the "imagecopymergegray" command ** and not
imagecopyresampled **
--------------------------------------------------------------------------
---------------------------------------------------------------------------
*/
// NOTE THAT NEGATIVE NUMBERS GO CLOCKWISE IN imagerotate(), I PREFER
NEGATIVE GO COUNTERCLOCKWISE AND POSITIVE GO CLOCKWISE
if ($this->isSuccessful && $image && isset($angle) &&
is_numeric($angle))
$image = @imagerotate(imagerecreatetruecolor($image), -1 * $angle,
0); // ROTATE IMAGE

Here is your resulting image:

http://valsignalandet.com/images/testshot2.jpg

That might make it a bit more clear as far as what I mean by the
"black
bar".

On Jun 20, 10:32 am, "comp.lang.php" <phillip.s.pow...@gmail.com>
wrote:
On Jun 20, 10:02 am, Rik <luiheidsgoe...@hotmail.comwrote:


On Wed, 20 Jun 2007 15:45:03 +0200, comp.lang.php
<phillip.s.pow...@gmail.comwrote:
Recap:
Using imagerotate within PHP 4.3.9 - PHP 5.2.0 for both XP and Linux,
all using GD2
If you rotate an image 180 degrees, all is fine
If you rotate an image 0 degrees and < 180 degrees, or 180 degrees
and < 360 degrees, while the image will rotate, its dimensions are
somehow not refactored and as a result you get a rather annoying black
bar in the newly-rotated image, along with part of your image being
cropped off.
I learned about a possible workaround with ImageMagick's convert
command, but has anyone found a better solution (other than using XP's
built-in image rotation routines)?
Depends on what you want from it, how would you like it to behave on
arbitrary angle? Calculate the width & height needed for the new image,
create that, set the backgroundcolor of your choice on it, and paste the
image in it & rotate.

I did that after imagerotate misbehaved the first time, however, it
seems as if imagerotate ignored the newly-calculated height and weight
options.

Say for instance you have an image of 300 x 150. If you rotate 90
degrees the image should be 150 x 300 with the image contents
perfectly rotated. Instead you have an image of 150 x 300 with a big
black bar on the right. This in spite of recalculating the correct
height and width for the new image.


--
Rik Wasmus- Hide quoted text -
- Show quoted text -- Hide quoted text -

- Show quoted text -- Hide quoted text -

- Show quoted text -

Jun 22 '07 #4
GOT IT!!!

if (!function_exists('imagerecreatetruecolor')) {
/**
* Recreate an existing image as a true color image {@link
http://us2.php.net/manual/en/functio...tate.php#62530 See notes
in imagerotate() for more information}
*
* @access public
* @param resource $image (reference)
* @param boolean $willRotate (default false)
* @param int $angle (default 0)
* @return resource $image
*/
function &imagerecreatetruecolor(&$image, $willRotate = false, $angle
= 0) {
if (!imageistruecolor($image) &&
function_exists('imagecreatetruecolor')) {
if ($willRotate && (($angle 0 && $angle < 180) || ($angle >
180 && $angle < 360))) {
list($width, $height) = array(@imagesy($image), @imagesx($image));
} else {
list($width, $height) = array(@imagesx($image), @imagesy($image));
}
$tempImage = @imagecreatetruecolor($width, $height);
@imagecopy($tempImage, $image, 0, 0, 0, 0, $width, $height);
$image = $tempImage;
}
return $image;
}
}

// NOTE THAT NEGATIVE NUMBERS GO CLOCKWISE IN imagerotate(), I PREFER
NEGATIVE GO COUNTERCLOCKWISE AND POSITIVE GO CLOCKWISE
if ($this->isSuccessful && $image && isset($angle) &&
is_numeric($angle)) $newImage = $image =
@imagerotate(imagerecreatetruecolor($image, 'willRotate', $angle), -1
* $angle, 0); // ROTATE IMAGE

On Jun 20, 9:45 am, "comp.lang.php" <phillip.s.pow...@gmail.com>
wrote:
Recap:

Using imagerotate within PHP 4.3.9 - PHP 5.2.0 for both XP and Linux,
all using GD2

If you rotate an image 180 degrees, all is fine

If you rotate an image 0 degrees and < 180 degrees, or 180 degrees
and < 360 degrees, while the image will rotate, its dimensions are
somehow not refactored and as a result you get a rather annoying black
bar in the newly-rotated image, along with part of your image being
cropped off.

I learned about a possible workaround with ImageMagick's convert
command, but has anyone found a better solution (other than using XP's
built-in image rotation routines)?

Thanks
Phil
Jun 23 '07 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
4257
by: Mike | last post by:
Hi all, I've been trying to get imagerotate() working with PHP 4.4.3 and the latest version of GDlib. An error message is given saying the function is unrecognised. Can anyone advise which...
0
1772
by: Martin | last post by:
Does the "imagerotate" function in PHP5 work correctly or am I doing something wrong? I'm using the code shown below to generate a simple rectangle and then to rotate it a specific number of...
1
4013
by: deshg | last post by:
Hey everyone how are you all doing? I am trying to use the imagerotate GD function to place an image on top of another image at an angle. Obviously when it rotates an image it creates a...
3
5625
by: usha535140 | last post by:
Hi, Can we use Ajax RoundedCornersExtender control with AJax,tabContainer?
0
7105
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
6967
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
1
6846
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
5439
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
1
4870
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
4564
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
0
3071
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
0
1381
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated ...
1
600
muto222
php
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.