Img uploaden via url.
Ik wil graag een plaatje kunnen uploaden door een url in te voeren. Ik heb nu al gewoon via <input type='file' blablabla> maar ik wil dat het ook met in url kan. Hoe doe ik dat?
kun je iets speciefieker zijn, waar heen moet het plaatje: database of wat??
Als de betreffende afbeeldingen al online staan daarentegen is het wel weer mogelijk. Met PHP zou je dan het plaatje in kunnen lezen en opslaan op je eigen server. Waarschijnlijk moet je dat met file_get_contents() en de juiste headers wel lukken.
ps. @Bram: sla het liefst nooit afbeeldingen of bestanden direct in de database op. Zet ze gewoon op je server en plaats alleen de bestands of eventueel locatie in je database.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Ik las laatst een artikel over de voor- en nadelen van afbeeldingen opslaan op de harddisk of in een database (blob's) en eigenlijk hebben ze allebei voor- en nadelen en is 't gewoon een persoonlijke keuze..
Zelfs het weggooien van het bestand kan via de database, in PostgreSQL kun je dat doen met een stored procedure in bv. PL/perl of PL/Python.
phpbram schreef op 10.02.2008 22:34:
kun je iets speciefieker zijn, waar heen moet het plaatje: database of wat??
Lijkt me op het filesystem gewoon. Waarom in een databas opslaan?
Tja dat kan wel met fopen(); of curl o.i.d.
Misschien voor een admin een optie maar zou dit zeker niet door bezoekers toelaten! Gezien de nodige beveiligsrisico's.
Over het opslaan van afbeeldingen in een database als blob ben ik het volledig met Frank eens.
Afbeelding verandert toch niet meer meestal na upload?!
Beetje zonde om dan iedere keer ook nog eens een datbase verbindingen te moeten gaan maken... Buiten de eerder genoemde nadelen?
Waarom ze je bitwise een afbeelding willen vergelijken eigenlijk? Voor injectie met code ?
Maar goed, dat zijn zeer gespecialiseerde toepassingen die je niet even op een maandagochtend inelkaar draait.
Quote:
Tja, de database verbinding zul je toch moeten maken aangezien je hoogstwaarschijnlijk de bestandsnaam wel in de database kwijt wilt, bovendien zal in de meeste gevallen de databaseverbinding toch al aanwezig zijn. Maar dat dit nadeel eigenlijk niet bestaat neemt natuurlijk nog niet weg dat je geen afbeeldingen in een database op moet slaan.Beetje zonde om dan iedere keer ook nog eens een datbase verbindingen te moeten gaan maken... Buiten de eerder genoemde nadelen?
Ik wil dat als je bijvoorbeeld het logo van PHPHulp zo willen uploaden dat je dan gewoon de URL van het plaatje kan intypen http://phphulp.nl/imgs/header/logo.gif en dus niet eerst op je eigen PC moet opslaan en dan uploaden.
@Blanche hoe doe ik dat dan met file_get_contents() ?
misschien heb je hier iets aan: http://nl.php.net/manual/nl/function.copy.php
http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php
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
56
57
58
59
60
61
62
63
64
65
66
67
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
56
57
58
59
60
61
62
63
64
65
66
67
<?php
class SimpleImage {
var $image;
var $image_type;
function load($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 save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image,$filename,$compression);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image,$filename);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image,$filename);
}
if( $permissions != null) {
chmod($filename,$permissions);
}
}
function output($image_type=IMAGETYPE_JPEG) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image);
}
}
function getWidth() {
return imagesx($this->image);
}
function getHeight() {
return imagesy($this->image);
}
function resizeToHeight($height) {
$ratio = $height / $this->getHeight();
$width = $this->getWidth() * $ratio;
$this->resize($width,$height);
}
function resizeToWidth($width) {
$ratio = $width / $this->getWidth();
$height = $this->getheight() * $ratio;
$this->resize($width,$height);
}
function scale($scale) {
$width = $this->getWidth() * $scale/100;
$height = $this->getheight() * $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->getWidth(), $this->getHeight());
$this->image = $new_image;
}
}
?>
class SimpleImage {
var $image;
var $image_type;
function load($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 save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image,$filename,$compression);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image,$filename);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image,$filename);
}
if( $permissions != null) {
chmod($filename,$permissions);
}
}
function output($image_type=IMAGETYPE_JPEG) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image);
}
}
function getWidth() {
return imagesx($this->image);
}
function getHeight() {
return imagesy($this->image);
}
function resizeToHeight($height) {
$ratio = $height / $this->getHeight();
$width = $this->getWidth() * $ratio;
$this->resize($width,$height);
}
function resizeToWidth($width) {
$ratio = $width / $this->getWidth();
$height = $this->getheight() * $ratio;
$this->resize($width,$height);
}
function scale($scale) {
$width = $this->getWidth() * $scale/100;
$height = $this->getheight() * $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->getWidth(), $this->getHeight());
$this->image = $new_image;
}
}
?>
http://nl.php.net/manual/nl/function.tmpfile.php
zetten en dan kopieeren
dan moet je de afbeelding denk ik in een zetten en dan kopieeren
Ik zie het probleem eigenlijk niet. Plaatje uploaden, resizen en de naam in je DB zetten en klaar ben je.
Jan Koehoorn schreef op 12.02.2008 21:36:
Ik zie het probleem eigenlijk niet. Plaatje uploaden, resizen en de naam in je DB zetten en klaar ben je.
Het uploaden via url (http://example.com/plaajte.jpg) en dan nog resizen is het probleem.
http://example.com/plaatje.jpg is gewoon een rechstreekse link naar een jpg bestand. Op die manier kun je niets uploaden. Je hebt een upload script nodig, naast dat resize script dat je al hebt. Kijk eens naar dit upload script van mij.
De url maar hoe zou ik dat dan kunnen combineren?
wat wil je nou precies? een url invoeren en dat automatisch iets wordt geupload oid?
ja én dat hij door mijn resize script heen gaat
opvragen is dan gewoon zo:
en als ik het plaatje wil verwijderen, is het gewoon;
record verwijderen uit database
en
Unlink(); gebruiken om plaatje uit een map te verwijderen.
werkt snel en makkelijk!