[PHP] imagerotate en transparantie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 11-09 14:55

Kaastosti

Vrolijkheid alom!

Topicstarter
In het verleden zijn er al verscheidene topics geweest over werken met transparantie. Veelal ging het dan om het maken van transparante gaten in plaatjes, wat uiteindelijk lukte. Ik ben al een aantal dagen bezig om ook iets met transparantie te doen, maar dan in combinatie met de imagerotate functie van de gd library.

Ook hier zijn eerder topics geweest, aangezien men toendertijd hetzelfde probleem had als ik nu: na het roteren blijven er zwarte vlakken over op de plekken die niet door het plaatje gebruikt worden. Ter demonstratie een screenshot van een gedraaid plaatje:

Afbeeldingslocatie: http://members.ams.chello.nl/e.venema4/images/got/imagerotate.jpg

Nu heeft de functie imagerotate een aantal argumenten, waarbij de laatste is voor de achtergrondkleur die over blijft. Dat is dus precies hetgeen wat nu door zwarte vlakken opgevuld wordt. Het gewoon simpel 'aanmaken' van een transparante kleur was al redelijk puzzelen, aangezien er niet iets is als een color() functie. Met hulp van de topics uit het verleden ben ik tot de volgende code gekomen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// Variables
$filename = 'image.jpg';
$degrees = 20;

$old_width = 1704;
$old_height = 2272;

$new_width = 90;
$new_height = 120;

// Resample
$new_image = imagecreatetruecolor($new_width, $new_height);
$old_image = imagecreatefromjpeg($filename);

imagealphablending($new_image, false);
imagecopyresampled($new_image, $old_image, 0, 0, 0, 0, $new_width, $new_height, $old_width, $old_height);

// Rotate
$transparent = imagecolorallocatealpha($new_image, 0, 0, 0, 127);
$rotated = imagerotate($new_image, $degrees, $transparent);
imagesavealpha($rotated, true);

// Output
header('Content-type: image/png');
imagepng($rotated);

Deze wordt aangeroepen vanuit een ander bestand alszijnde een image, wat gewoon goed werkt. Het probleem is dus dat ik die transparantie er niet in krijg. Dat is ook de reden waarom het uiteindelijk een .png bestand wordt, ik heb hier en daar gelezen dat dat kon schelen op het moment dat je transparantie wilt verwerken in plaatjes en die online wilt laten zien. Prachtig, maar het moge duidelijk zijn dat ook dat hier niet echt wilde helpen.

Is er ondertussen al iets veranderd in de gd library wat dit mogelijk moet maken, of heb ik gewoon vette pech? Zou jammer zijn... ben zulke leuke dingen van plan ;)

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Zoek je niet gewoon imagecolortransparent :?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 11-09 14:55

Kaastosti

Vrolijkheid alom!

Topicstarter
Als ik gebruik maak van:
PHP:
1
2
$color = imagecolorallocate($rotated, 0, 0, 0);
imagecolortransparent($rotated, $color);

Wat volgens mij in zou moeten houden dat ik een kleur aanmaak, te weten zwart. Daarna laat ik alles wat zwart is, vervangen door een transparante kleur. Nu is zwart natuurlijk niet de ideale kleur voor dit soort dingen, maar dat is later te vervangen. Helaas werkt het niet zo simpel als gehoopt ;)

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 23:37

pietje63

RTFM

Gaat het imagecolorallocate gedeelte wel zeker goed?

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Ik zie Firefox in je screenshot, maar je weet dat IE geen transparante PNG's ondersteunt?

Acties:
  • 0 Henk 'm!

  • Lukse
  • Registratie: Januari 2004
  • Laatst online: 12-04-2023
chris schreef op woensdag 22 juni 2005 @ 11:13:
Ik zie Firefox in je screenshot, maar je weet dat IE geen transparante PNG's ondersteunt?
Nog niet... :)

Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 11-09 14:55

Kaastosti

Vrolijkheid alom!

Topicstarter
Gaat het imagecolorallocate gedeelte wel zeker goed?
Als ik dezelfde kleur gebruik om een rechthoek middenin de foto de plaatsen, wordt deze transparant. De kleurselectie gaat dus in ieder geval wel goed.
Ik zie Firefox in je screenshot, maar je weet dat IE geen transparante PNG's ondersteunt?
Dat is inderdaad ook nog een interessant punt... is er een formaat wat zowel onder FF als onder IE kan werken met transparantie?

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 09-09 13:57

pjvandesande

GC.Collect(head);

Kaastosti schreef op woensdag 22 juni 2005 @ 13:17:
[...]

Als ik dezelfde kleur gebruik om een rechthoek middenin de foto de plaatsen, wordt deze transparant. De kleurselectie gaat dus in ieder geval wel goed.

[...]

Dat is inderdaad ook nog een interessant punt... is er een formaat wat zowel onder FF als onder IE kan werken met transparantie?
Gif?

Acties:
  • 0 Henk 'm!

  • Arjan A
  • Registratie: November 2000
  • Laatst online: 11-09 18:26

Arjan A

Cenosillicafoob

Kaastosti schreef op woensdag 22 juni 2005 @ 13:17:
[...]
Dat is inderdaad ook nog een interessant punt... is er een formaat wat zowel onder FF als onder IE kan werken met transparantie?
PNG werkt wel onder IE, als je maar een fix/workaraound gebruikt.
De weerafbeeldingen van weather.com bijvoorbeeld, worden als PNG aangeleverd. Op mijn website zie je ze transparant rechtsbovenin staan.
Met een simpele
code:
1
<!--[if gte IE 5.5000]><script type="text/javascript" src="pngfix.js"></script><![endif]-->

en het betreffende .js bestand kan je de PNGs transparant maken.

Canon EOS | DJI M2P
Fotoblog · Mijn werk aan jouw muur


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 11-09 14:55

Kaastosti

Vrolijkheid alom!

Topicstarter
Da's in ieder geval en stap voorwaarts... dat transparante png's onder zower FF als IE kunnen werken. Probleem is nu alleen nog dat die transparantie niet echt doorkomt na het roteren van een image.

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.

Pagina: 1