Image resizen
Hallo PHP programmeurs,
Ik heb een heel vervelend probleem, ik ben bezig met een foto gallery aan het programeren. In die foto gallery moeten foto's worden omgezet naar een max size van 600 x 400 px. Echter kan ik niet aan de juiste berekening komen. Ik heb al een aantal dingen geprobeerd o.a.
Maar dat werkt niet helemaal. En werkt alleen voor de breedte's
Heeft iemand enig idee hoe ik het anders zou kunnen doen?
Gr, Kevin van der Burgt
Ik heb een heel vervelend probleem, ik ben bezig met een foto gallery aan het programeren. In die foto gallery moeten foto's worden omgezet naar een max size van 600 x 400 px. Echter kan ik niet aan de juiste berekening komen. Ik heb al een aantal dingen geprobeerd o.a.
Code (php)
1
2
3
4
2
3
4
if($bron_breedte > 600){
$nieuwe_breedte = 600
$nieuwe_hoogte = round($bron_breedte*$nieuwe_breedtee\$bron_hoogte);
}
$nieuwe_breedte = 600
$nieuwe_hoogte = round($bron_breedte*$nieuwe_breedtee\$bron_hoogte);
}
Maar dat werkt niet helemaal. En werkt alleen voor de breedte's
Heeft iemand enig idee hoe ik het anders zou kunnen doen?
Gr, Kevin van der Burgt
Dit is gewoon even rekenen.
Je wilt altijd dat de verhouding van de bron afbeelding niet veranderd. Anders ga je de afbeelding vervormen.
Ik denk dat je het beste de breedte van de nieuwe afbeelding op 600px kunt zetten.
De hoogte kun je dan uitrekenen met die 600px en de verhouding van de bron afbeelding.
Je wilt altijd dat de verhouding van de bron afbeelding niet veranderd. Anders ga je de afbeelding vervormen.
Ik denk dat je het beste de breedte van de nieuwe afbeelding op 600px kunt zetten.
De hoogte kun je dan uitrekenen met die 600px en de verhouding van de bron afbeelding.
Gewijzigd op 08/08/2010 21:55:52 door Martijn B
Kevin,
even een share uit een fileFactory.
Nog even .. je zit inderdaad met die dimension .. een image moet je niet uit zijn verband willen halen, I think. En je zit met het probleem 'staat de foto' of 'ligt de foto'. Wat jij wil kan wel .. als jij altijd jouw aangegeven maat wil .. dan moet je ook gaan werken met crop, zorg er dan wel voor dat je foto nooit minder breedt is dan 600px anders is de foto onscherp.
even een share uit een fileFactory.
Nog even .. je zit inderdaad met die dimension .. een image moet je niet uit zijn verband willen halen, I think. En je zit met het probleem 'staat de foto' of 'ligt de foto'. Wat jij wil kan wel .. als jij altijd jouw aangegeven maat wil .. dan moet je ook gaan werken met crop, zorg er dan wel voor dat je foto nooit minder breedt is dan 600px anders is de foto onscherp.
Code (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
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public function resize($p_iDimension, $p_bConstant=false, $p_bNotBigger=true)
{
$this->m_sFileSourcePath = '';
$this->m_sFileDestinationPath = '';
$source = imagecreatefromjpeg($this->m_sFileSourcePath.DIRSEP.$this->m_sFileSourceName);
$destination = SitePath.$this->m_sFileDestinationPath.DIRSEP.$this->m_sFileDestinationName.'jpg';
$iWidth = imagesx($source);
$iHeight = imagesy($source);
if($p_bNotBigger && ($iWidth < $p_iDimension && $iHeight < $p_iDimension)){
$p_iDimension = ($iWidth > $iHeight) ? $iWidth : $iHeight;
}
if($p_bConstant){
$iSizeX = $p_iDimension;
$iSizeY = $p_iDimension;
}else{
if($iWidth > $iHeight){
$iSizeX = $p_iDimension;
$iSizeY = ($p_iDimension/$iWidth)*$iHeight;
}else{
$iSizeX = ($p_iDimension/$iHeight)*$iWidth;
$iSizeY = $p_iDimension;
}
}
$rResisedImage = imagecreatetruecolor($iSizeX, $iSizeY);
imagecopyresampled($rResisedImage, $source, 0, 0, 0, 0, $iSizeX, $iSizeY, $iWidth, $iHeight);
imagejpeg($rResisedImage, $destination,90);
imagedestroy($rResisedImage);
return true;
}
{
$this->m_sFileSourcePath = '';
$this->m_sFileDestinationPath = '';
$source = imagecreatefromjpeg($this->m_sFileSourcePath.DIRSEP.$this->m_sFileSourceName);
$destination = SitePath.$this->m_sFileDestinationPath.DIRSEP.$this->m_sFileDestinationName.'jpg';
$iWidth = imagesx($source);
$iHeight = imagesy($source);
if($p_bNotBigger && ($iWidth < $p_iDimension && $iHeight < $p_iDimension)){
$p_iDimension = ($iWidth > $iHeight) ? $iWidth : $iHeight;
}
if($p_bConstant){
$iSizeX = $p_iDimension;
$iSizeY = $p_iDimension;
}else{
if($iWidth > $iHeight){
$iSizeX = $p_iDimension;
$iSizeY = ($p_iDimension/$iWidth)*$iHeight;
}else{
$iSizeX = ($p_iDimension/$iHeight)*$iWidth;
$iSizeY = $p_iDimension;
}
}
$rResisedImage = imagecreatetruecolor($iSizeX, $iSizeY);
imagecopyresampled($rResisedImage, $source, 0, 0, 0, 0, $iSizeX, $iSizeY, $iWidth, $iHeight);
imagejpeg($rResisedImage, $destination,90);
imagedestroy($rResisedImage);
return true;
}
Gewijzigd op 09/08/2010 00:00:19 door Mark Beets
Ikzelf gebruik de uploadclass van verot.net voor zulke bewerkingen. Daarmee kan je ook heel makkelijker de verhoudingen behouden.
Het gaat inderdaad om de ratio, als je afbeelding meer dan 600px breed is, met welke factor verklein je hem dan om op 600 te komen? Die ratio gebruik je dan ook bij de hoogte,
Hier een stukje uit een script dat ik nog heb liggen, het is al een paar jaar oud maar moet je prima op weg kunnen helpen, lijkt me.
Hier een stukje uit een script dat ik nog heb liggen, het is al een paar jaar oud maar moet je prima op weg kunnen helpen, lijkt me.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17




