특정 URL에서 이미지 다운로드 및 디코딩 방법

zzuina의 이미지

웹상의 이미지(jpg, gif, png, bmp...)에 대한 URL을 입력값으로 받아서

이미지를 다운로드 받고 디코딩해서 각 픽셀의 RGB값을 뽑아내는 작업을 하려고 합니다.

이런 일은 처음이라 어디서부터 어떻게 손을 대야할지 모르겠네요 -_ㅠ

리눅스에서 프로그램을 구현해야하는데요,

필요한 라이브러리나 구현방법을 좀 자세히 설명해주시면 감사하겠습니다 :)

송효진의 이미지

php 에 gd 면 bmp 빼고 다 되는군요.
bmp 는 변환한번 하면 되고요.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~

zzuina의 이미지

C로 구현을 해야할 것 같아요.
PHP로는 참고할만한 것들이 많이 있었는데 C로 구현을 하려니까
URL을 어떻게 처리해주는지 전혀 감이 안잡히네요..-_ㅠ

aero의 이미지

socket 열어서 헤더등등을 만들어 HTTP요청 날려서 응답 분석해서 이미지로 저장하는걸
구현하고 그게 귀찮으면 cURL ( http://curl.haxx.se/ ) 같은 라이브러리를 쓰면 될 것 같고
이미지 분석은 마찬가지로 GD를 쓰시면 되겠네요.
C로 하더라도 기본 구조는 제가 올려드린 Perl코드와 유사할겁니다.
물론 생산성과 개발속도는 Perl에 비해 비교가 안되게 떨어지겠지만요. :)

aero의 이미지

심심해서 한 번 만들어 봤습니다.

KLDP의 곰돌이 로고를 받아서 특정 Pixel의 RGB값을 뽑아내는 예제입니다.
파일을 받기위에 LWP모듈 (http://search.cpan.org/~gaas/libwww-perl-5.805/lib/LWP.pm) ,
이미지 분석을 위해 GD모듈 ( http://search.cpan.org/~lds/GD-2.35/GD.pm )을 사용합니다.
다음 코드를 이해만 하시면 여기다 살을 붙이시는건 별로 어려운일이 아니라 생각되네요.

#!/usr/bin/env perl
use strict;
use warnings;
use LWP;
use GD;
 
my $browser = LWP::UserAgent->new;
my $response = $browser->get('http://kldp.org/files/bluemarine_logo.png');
open(OUT, ">bluemarine_logo.png") || die $!;
binmode(OUT);
print OUT $response->content;
close(OUT);
 
my $image = GD::Image->new("bluemarine_logo.png");
my $index = $image->getPixel(29,29);
my ($r,$g,$b) = $image->rgb($index);
print "$r $g $b\n";
$index = $image->getPixel(29,10);
($r,$g,$b) = $image->rgb($index);
print "$r $g $b\n";

결과

0 0 0
245 188 81
zzuina의 이미지

Perl을 기초부터 공부하면서 해보고 있습니다.
그런데 use GD 라인에서 에러가 나네요.

아마도 라이브러리가 설치되어있지 않은 것 같은데
어떻게 확인해봐야 하는건지 모르겠습니다 ^^;

리눅스는 처음이라 라이브러리 설치부터 쉽지가 않네요. -_ㅠ
CentOS를 사용하고 있고,
처음에 설치할 때 development tool 패키지를 선택해서 그런지
왠만한건 따로 설치하지 않아도 다 있는것 같던데..

rpm -qa | grep gd 해보면

gdb-6.5-16.el5
gdbm-devel-1.8.0-26.2.1
gd-2.0.33-9.3.fc6
sysklogd-1.4.1-39.2
gdm-2.16.0-30.el5.centos
gdbm-1.8.0-26.2.1

이렇게 나옵니다. gd가 있는걸 보면 설치되어있는거 아닌가요?
혹시나 해서 gd라이브러리 설치방법에 관한 글들을 검색해서 여러개 읽어봤는데
usr/local/lib 이런식으로 디렉토리를 설정하시던데
저같은 경우에 local내에 lib나 include에는 파일이 하나도 없는걸로 나옵니다.
usr/lib와 usr/include에는 많이 있는데..
라이브러리 설치 경로는 어떤식으로 정해지는 건가요?

초보라 하나하나가 다 어렵네요. ㅠ_ㅠ
자세히 설명해 주시면 정말정말 감사하겠습니다 :)

zzuina의 이미지

어렵게만 생각했는데
마음이 한결 놓이네요.

Perl은 해본적이 없어서 잘 모르지만
지금부터 한번 공부해볼까 싶기도 +_+

잘 참고하겠습니다.
정말정말 감사드립니다 :)

송효진의 이미지

perl 로 하셔도 되는거면 php 로 하면 더 간단한데요~
#!/usr/bin/php 는 나쁜 방법이 아닙니다.::smile::

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~

zzuina의 이미지

원래는 C로 구현하려다가
Perl 예제도 올려주시고 해서 한번 배우면서 해보고 있는 중입니다.

perl이나 php나 하나도 모르는 상황이라 ;;
그래도 예제가 없는 것 보다는 있는걸 배우는 게 빠를거란 생각에 ^^

기회가 되면 php도 한번 배워봐야겠네요 :)
답변 감사드립니다 ^^

송효진의 이미지

예제~ㅋㅋㅋ

#!/usr/bin/php
<?php

$im = imagecreatefromstring(
file_get_contents('http://address/gif|jpg|png')
);
echo dechex(
imagecolorat($im, 0, 0)
);
imagedestroy($im);

?>

chmod 755

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~

zzuina의 이미지

정말 간단하네요~~
오와 +_+ 놀라울 따름입니다!!

하루종일 gd-devel 패키지 설치한다고 진땀빼고,
왠지 허무한 생각이 드는군요 ㅠ_ㅠ

PHP와 Perl 사이에서 갈등중..ㅋㅋ
정말 감사합니다 ^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.