Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Obrysowanie obrazka
Forum PHP.pl > Forum > PHP
dragossani
Był tu temat na temat obrysowywania obrazka ale moje manipulacje z przenoszeniem tematu nie wyszły mu na zdrowie. :oops:

Pytanie brzmiało: jak obrysować w php obrazek linią o grubości jednego piksela w konkretnym kolorze? Zaznaczam, że autorowi chodzi o GD, a nie style. smile.gif
uboottd
Pisze z pamieci w pseudocodzie bo akurat nie mam tego jak sprawdzic na zywym phpie z gd:

Kod
$w = szerokosc($pic_old);

$h = wysokosc($pic_old);

$pic = nowy_obrazek($w,$h);

kopiuj_fragment($pic_old,$pic,0,0,$w,$h);

$col = rezerwuj_kolor($pic,#rgb);

rysuj_linie($pic,0,0,$w-1,0,$col);

rysuj_linie($pic,0,$h-1,$w-1,$h-1,$col);

rysuj_linie($pic,0,0,0,$h-1,$col);

rysuj_linie($pic,$w-1,0,$w-1,$h-1,$col);

zapisz_jpg($pic);


Jesli komus zalezy, moge gdzies dorwac php z GD i zrobic przyklad dokladnie.
kurtz
troche inne myslenie ;)
juz mniej pseudokod ale nie testowane[php:1:9532c8b127]<?php

// pobieramy rozmiary starego obrazka
list($w, $h) = getimagesize("stary.jpg");

// tworzymy obrazek nieco wiekszy
$obrazek = imagecreate($w+2, $h+2);

// zapelniamy $obrazek kolorem
$niebieski = colorallocate($obrazek, 0, 0, 255);
imagefill($obrazek, $w+2, $h+2, $niebieski);

// wrzucamy w srodek stary obrazek
$obrazek_stary = imagecreatefromjpeg("stary.jpg");
imagecopy($obrazek, $obrazek_stary, 1, 1, 0, 0, $w, $h);

// i pokazujemy obrazek
header("Content-type: image/jpeg");
imagejpeg($obrazek);

?>[/php:1:9532c8b127]
kwiateek
Wyprobowalem zarowno jeden jak i drugi przyklad jednak nie dzialaja. Konflik wystepuje przy imagecopy (u mnie na w2k pojawia sie blad php.exe) na innych serwerach (probowalem na kilku) otrzymuje informacje od routera ze dokument na zerowy rozmiar czyli skrypt najprawodpodobniej nie zostal pomyslnie wykonany. Poza colorallocate na imagecolorallocate w przykladnie kurtz'a nic nie poprawialem.

Jak mozesz uboottd to przedstaw caly kod.
uboottd
Po malym usprawnieniu przy okazji:
Kod
  $pic = imagecreatefromjpeg("dentysta.jpg");

  $kol = imagecolorallocate ($pic, 255, 0, 255);

  for ($i=0; $i<5 /*szerokosc ramki*/; $i++)

    imagerectangle ($pic,$i,$i,imagesx($pic)-$i-1,imagesy($pic)-$i-1,$kol);

  imagejpeg($pic);


testowane na php4.3.1
kwiateek
Problem rozwiazalem brakowalo chyba headera:

[php:1:478599001f]<?php
Header("Content-type: image/jpeg");
list($w, $h) = getimagesize("stary.jpg");
$im = imagecreatefromjpeg("stary.jpg");
$black = imagecolorallocate($im,0,0,0);
imageline($im,0,0,$w-1,0,$col);
imageline($im,0,$h-1,$w-1,$h-1,$col);
imageline($im,0,0,0,$h-1,$col);
imageline($im,$w-1,0,$w-1,$h-1,$col);
Imagejpeg($im);
ImageDestroy($im);
?>[/php:1:478599001f]

uboottd dzieki wyprzediles mnie z postem smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.