opslaan plaatje
Ik zit met het volgende probleem. Ik probeer een script te maken dat een plaatje resized met een bepaald percentage. Dat is gelukt. Zie code beneden. Ik echo deze dan op het scherm om aan de gebruiker te laten zien wat er gebeurt is. Als hij tevreden is. Kan het plaatje worden opgeslagen. Nou ik het plaatje al geresized heb is het mogelijk om dat plaatje op te slaan?? Zo ja, hoe doe ik dit?
Of moet ik het originele plaatje opnieuw resizen voor dat ik het kan opslaan, want dit kost natuurlijk weer extra capaciteit?
PS. Ik ben net begonnen met OOP dus als er opmerkingen/tip zijn dan hoor ik deze graag.
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
class SimpleImage {
var $image;
var $image_type;
var $orgWidth;
var $orgHeight;
function __construct($filename) {
$image_info = getimagesize($filename);
$this->image_type = $image_info[2];
if( $this->image_type == IMAGETYPE_JPEG ) {
$this->image = imagecreatefromjpeg($filename);
} elseif( $this->image_type == IMAGETYPE_GIF ) {
$this->image = imagecreatefromgif($filename);
} elseif( $this->image_type == IMAGETYPE_PNG ) {
$this->image = imagecreatefrompng($filename);
}
}
function output() {
imagejpeg($this->image);
}
function scale($scale) {
$this->orgWidth = imagesx($this->image);
$this->orgHeight = imagesy($this->image);
$width = $this->orgWidth * $scale/100;
$height = $this->orgHeight * $scale/100;
$this->resize($width,$height);
}
function resize($width,$height) {
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->orgWidth, $this->orgHeight);
$this->image = $new_image;
}
}
$image = new SimpleImage('http://smbjorklund.no/sites/smbjorklund.no/files/pictures/1/apple_mac_os_x_10.5_leopard_1024x768_1.jpg');
$image->scale(50);
$image->output();
unset ($image);
?>
class SimpleImage {
var $image;
var $image_type;
var $orgWidth;
var $orgHeight;
function __construct($filename) {
$image_info = getimagesize($filename);
$this->image_type = $image_info[2];
if( $this->image_type == IMAGETYPE_JPEG ) {
$this->image = imagecreatefromjpeg($filename);
} elseif( $this->image_type == IMAGETYPE_GIF ) {
$this->image = imagecreatefromgif($filename);
} elseif( $this->image_type == IMAGETYPE_PNG ) {
$this->image = imagecreatefrompng($filename);
}
}
function output() {
imagejpeg($this->image);
}
function scale($scale) {
$this->orgWidth = imagesx($this->image);
$this->orgHeight = imagesy($this->image);
$width = $this->orgWidth * $scale/100;
$height = $this->orgHeight * $scale/100;
$this->resize($width,$height);
}
function resize($width,$height) {
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->orgWidth, $this->orgHeight);
$this->image = $new_image;
}
}
$image = new SimpleImage('http://smbjorklund.no/sites/smbjorklund.no/files/pictures/1/apple_mac_os_x_10.5_leopard_1024x768_1.jpg');
$image->scale(50);
$image->output();
unset ($image);
?>
Gewijzigd op 07/02/2012 20:18:20 door Peter paul
BUMP
Een bestand wat wordt geupload sla ik doorgaans op via de wijze zoals beschreven op http://php.net/manual/en/function.move-uploaded-file.php
Uploaden is niet meer nodig; de image staat al op de server.
Wat je nodig hebt, is de functie imagejpeg() om die resource op te slaan.
En dan nog de interactie met de client.
De gebruiker moet via een formulier (al is het slechts 1 knop) zijn akkoord kunnen geven.
In hidden input velden steek je dan de gegevens (url file, afmetingen, ...)
Jij stuurt dan die post door naar de php-logica die imagejpeg() aanroept (ergens in een methode van de class).
Kan je tonen hoe je de class aanspreekt ($mijn_var = new SimpleImage()... )?
Van waar komt de file?
Sla je data op in een DB?
Is er een user systeem?
...
(kwestie van een beetje in te schatten wat de vereisten zijn)
Je zegt de image staat al op de server?? Ik heb nog niets opgeslagen of iets dergelijks. maar kan ik wel bij het eerder ge resizede plaatje komen om hem vervolgens op te slaan?
Peter paul op 07/02/2012 20:21:24:
Ik heb nog niets opgeslagen of iets dergelijks.
Waar staat de originele image? Staat die op jouw server of pluk je die van andere sites?
Ik zou graag willen dat mensen een plaatje kunnen uploaden of een url kunnen in geven. Ik ben begonnen met een plaatje van het internet daar haal ik ze dus ook vandaan.
Eventjes puur conceptueel, zonder iets van praktische code.
Kijk, de eerste keer uploadt de gebruiker dus het origineel.
Op dat moment staat die file dus op de server.
Ik zou dus niet aanraden dat de gebruiker de foto nog eens moet uploaden. De originele foto staat op de server, je kan dat origineel evengoed opslaan op de server.
Trouwens, tegen dit moment heb je de aangepaste resource ook ter beschikking. Je zou evengoed die resource ook kunnen opslaan.
bv. beide in een temp folder.
Je hebt de GD library al eens doen werken, de upload is al eens gebeurd, ik zie niet in waarom dit dubbel moet gebeuren.
Het enige wat jij (php-logica op de server) nog moet weten, is een goedkeuring; dat is weinig informatie.
Sla dus ergens de gegevens op, in een database; eventueel in een session.
Zorg dat je een formulier naar de gebruiker stuurt (nu ja, een OK en Annuleer-knop) waarin je een in een hidden field een link legt met de images (het origineel en de aangepaste) (bv. de id van het record).
Bij een goedkeuring doe je een move van de file, dit vergt weinig van een server, net zoals een cut/paste op je pc ook weinig van je processor vraagt.
Bij een annulering vernietig je de file(s).
---
(EDIT)
Nu, het hangt er eigenlijk ook van af wat je van plan bent indien je geen goedkeuring krijgt.
Wat doe je dan?
Een beter percentage aanbieden of zo? In dit geval in het interessant het origineel bij te houden.
Misschien is het niet nodig het origineel bij te houden; hangt er van af hoe je het precies afhandelt.
Kan je je hier in vinden?
Iemand andere ideeën?
Gewijzigd op 08/02/2012 00:01:33 door Kris Peeters