كمكم كنيد ! ميخوام طرحي كه كاربر در فلش ميكشه رو به صورت عكس دربيارم!

BehrouzPc

پــــادشــاه فــلــــش
من ميخواهم قسمتي و جود داشته باشه كه كاربر بتواند تصويري كه در فلش رسم كرده را به صورت عكس در بياورد به صورت آنلاين:D
البته من ميدونم اين كار با استفاده از پي اچ پي وفلش امكان پذيره ولي نمي دونم چطوري اگر كسي ميدونه به من هم بگه اگه نمونه خارجيش رو هم باشه خوبه خودم هر چي گشتم پيدا نكردم - ممنون ميشم كمكم كنيد:neutral:
:eek:
 

BehrouzPc

پــــادشــاه فــلــــش
واقعا" هچكس اصلا هيچي در اين مورد نمي دونه
 

amir_s

Active Member
آخه کار ساده ای نیست !
میشه در موارد خیلی ساده این کار رو انجام داد ! اونهم با استفاده از ارسال مختصات به Php و ایجاد عکس توسط اون !
که خوب خیلی سخته !

اگر جناب کامیار اینجا هم تشریف بیارن شاید بتونن کمکی بکنن ! شاید با استفاده از FlashCom بشه کارایی کرد !
 

phoenix

Member
من نمی دونم کی گفته این کار با PHP و Flash امکان پذیره! البته هست نمی دونم با PHP یا نه ولی خیلی دردسر داره! امیر FlashCom کمی شاید کار را راحت تر کنه ولی کلیت کار با توجه به اینکه فلش قابلیت screen capture کردن نداره و یا اینکه نمیشه Object های BitmapData را برای سرور ارسال کرد تقریبا غیر ممکن به نظر می آید.

behrouzpc، من الگوریتم کار رو در 4 مرحله توضیح میدم (شاید بعدش از انجامش منصرف بشی):

1- قسمت logic ترسیم در محیط فلش
2- بررسی data و جمع آوری نقاط در یک متغیر ActionScript
3- ارسال متغیر برای سرور
4- باز رسم کردن توسط سرور

مورد 1: من از نحوه ایجاد تصوير فلش که شما ساختید اطلاعی ندارم ولی به احتمال زیاد از دستورات lineTo در event های مربوط به mouse استفاده کردید ولی باید بگم که با انجام این کار به صورت عکس در آوردن تصویر به هیچ وجه عملی نیست چون شما با انجام این کار و به فرض ارسال به سرور با یکسری نقاط سرو کار دارید که فقط برای محیط فلش آشناست. مختصات نقاط و همچنین نوع رسم خطوط فقط مختص فلش است و با software های تحت سرور تا جایی که من اطلاع دارم نمیشه چنین نقاشی را باز رسم کرد. شما برای ترسیم باید از کلاس جدید BitmapData و متد های setPixel یا setPixel32 در فلش 8 استفاده کنید که همانند کار بر روی یک image می باشد. این کلاس فقط متد های پایه برای پردازش تصویر دارد به طوری که مثلا متدی مثل lineTo در آن موجود نیست و باید آنرا باز نویسی کنید. به علاوه ترسیم در BitmapData مثل کار در نرم افزار paint می باشد (نقاط جدا و با کناره های sharp) برای ایجاد خطوط نرم باید اصطلاحا از filter های anti-alias استفاده کنید (مثل photoshop ) که البته اون را هم باید خودتان بنویسید! اگر درس signals & systems در دانشگاه یادم مونده باشه باید بگم که anti-alias و کلا signal processing کار بسیار سختیه. مخصوصا وقتی با یک زبان نسبتا کند مثل ActionScript سر و کار دارید

مورد 2: جمع آوری نقاط در یک image باز از مشکلات اساسیه. شما باید در این حالت کد 32 بیتی کلیه نقاط در صفحه (قرمز، سبز، آبی + alpha) را تک تک جمع آوری کنید! بنابراین مثلا در یک عکس 100x100 شما با 10000 نقطه سر و کار دارید و فکر می کنم ActionScript برای انجام این کار کمی کند باشه. برای همینه که تقریبا تمامی ترم افزار های پردازش تصویر با زبانهای سطح پایین مثل C نوشته می شوند

مورد 3: برای ارسال این نقاط به سرور تنها دو راه وجود داره: استفاده از Remoting و یا استفاده از FlashCom. علتش هم اینه که این حجم عظیم data باید توسط یک Object و یا Array به سرور ارسال بشوند و تنها استفاده از Remoting و FlashCom این قابلیت را دارند که Object یا Array دریافتی از client را بازخوانی کنند. استفاده از LoadVars یا XML با توجه به حجم عظیم data غیر ممکن است. مشکل دیگر در این مورد data زیادی است که باید به سرور ارسال شود و لازمه اون یک connection با سرعت بالا است!

مورد 4: نقاط دریافت شده توسط سرور باید توسط یک web-service یا application server قوی به image تبدیل شود. web-service های تحت Java با توجه به image processing قوی Java مطلوب تر هستند. مثلا کار با ColdFusion یا WebLogic راحت تر از ASP هست ولی حتی با استفاده از Java باز تبدیل نقاط کار حجیمی برای سرور است. مثلا شما برای تبدیل هر image با اندازه 100x100 باید بر روی سرور یک آرایه 10000 عضوی را مرور کنید. با انجام این مرحله می توان خروجی JPG یا GIF یا ... را برای فلش برگرداند.

فکر می کنید ارزشش را داره؟

(این چیزی بود که به ذهن من رسید، با این حال امشب از چند نفر سوال می کنم شاید روش بهتری را داشته باشند)
 

phoenix

Member
یک چیزی الان یادم اومد. فکر کنم با استفاده از macromedia breeze میشه راحت تر این کار رو کرد. البته در حد تئوری. من با breeze کار نکردم ولی میدونم screen capture داره.

oops فکر کنم این کار هم با توجه به قیمت بسیار بالای breeze عملی نیست.
 

amir_s

Active Member
phoenix گفت:
یک چیزی الان یادم اومد. فکر کنم با استفاده از macromedia breeze میشه راحت تر این کار رو کرد. البته در حد تئوری. من با breeze کار نکردم ولی میدونم screen capture داره.

oops فکر کنم این کار هم با توجه به قیمت بسیار بالای breeze عملی نیست.
آره با این موافقم !!!


ممنون کامیار عزیز به خاطر توضیحاتت و وقتی رو که می ذاری !

حرف من هم همینه ! در موارد خیلی ساده میشه که مختصات نقاط رو به سرور فرستاد و دوباره توی سرور اون عکس رو کشید !
 

BehrouzPc

پــــادشــاه فــلــــش
خيلي ممنون از همه شما ولي اين سايت رو ببينيد تا دقيقا ببينيد من چي ميخوام - يه چيزي تو مايه هاي http://www.mixarcade.com/ratemydrawing/ اين باشه - حتما ببينيد و اگه طراحي تون هم خوبه تو مسابقش شركت كنيد البته اول بايد ثبت نام كنيد تا بتونيد تو مسابقش شركت كنيد فكر هم نمي كنم از flash com استفاده كرده باشه كد هاش كه فقط به يك فايل پي اچ پي ارجاع شده بود كه با نام getway.php كه بقييه سيستم شو تو پي اچ پي نيدونم . ممنون ميشم اگه كمكم كنيد نمونه خارجيي يا هر چيزي كه بتونه اين جور كاري رو انجام بده و براي آبجكت و كاركتر هايي كه داخل يك پروژه هستند هم عمل كنه يعني انهارو هم رسم كنه رو ميخوام - اميدوارم يكي بتونه جوابم رو بده و باز هم از امير خان و كاميار مه اهميت دادند تشكر مي كنم.
 
آخرین ویرایش:

phoenix

Member
خیلی خب، این نمونه جزو موارد ساده میشه. البته طرف باید خل باشه که به سرورش اینقدر فشار میاره!
ببین با FlashCom نیست ولی Remoting هست، البته با AMFPHP هست که مدل openSource از Remoting تحت php هست. من فقط با remoting های تحت Java روی ColdFusion و JRun کار کردم که محصول macromedia هست ولی کسانی هستند اینجا که فکر کنم AMFPHP کار کرده باشند.

الگوی کار این نمونه اینه: خطوطی که رسم میکنی بسیار باریک هستند و از filtering و antialiasing هم استفاده نشده، بنابراین نمونه ساده ای است و میشه تحت سرور باز رسمش کرد. کلیه نقاط را به صورت string برای سرور ارسال می کند (بیچاره سرور) و سرور نقاط را با خطوط سیاه به هم متصل می کند. فرمت data ارسالی هم بدین شکله:

data = startX,startY,endX,endY

و مثلا برای 2 نقطه بدین صورت میشه:

data = 0,0,5,5|5,5,20,20

اینم مشخصات remoting gateway: [قول بدین هکش نکنین : ) ]

کد:
gateway: http://www.mixarcade.com/mixarcade/ratemydrawing/gateway.php

service : Draw

methods:

	createaThumb(username, data, category);
	
	getDrawID(username, title);
	
	getEmail(username);
	
	getKey(id);
	
	sendConfirm(username, id, key, email);

(یه کمی security متدهاش کمه!)


قول داده بودم که از چند نفر هم بپرسم، Scott Hyndman نمونه ای را بهم نشون داد که تقریبا همون چیزیه که توی پست قبلی الگوریتمش رو گفتم. فکر نمیکردم کسی اونقدر خل باشه که اینکار رو بکنه ولی مثل اینکه اشتباه کرده بودم!

Mario Klingemann یک چیزی ساخته که واقعا آدم رو شکه میکنه (خدای من image compression در فلش) بهتره یک نگاهی بهش بندازین، البته نسخه بتا است. اینم بگم که این فقط یک نمونه ساده برای نقاشی است، در فلش 8 خیلی از کارهایی که حتی در photoshop قابل انجامه رو میتونه روی یک عکس انجام داد. حالا اگه بشه این عکس رو save هم کرد میشه یک نرم افزار image manipulation قوی تحت وب!

http://www.quasimondo.com/archives/000572.php

پست ها رو هم بخونین، کلی متد برای image compression و حتی image ساختن هست


behrouzpc ممنون، پست خوبی بود، کلی چیز جدید یاد گرفتم. با macromedia هم تماس گرفتم (کلی ایده و قابلیت جدید میشه اینجوری ایجاد کرد). موفق باشی
 

BehrouzPc

پــــادشــاه فــلــــش
مرسي از كمك شما و پشتكارتون آقا كاميار - اين منبعي كه معرفي كرديد خيلي خوب بود ولي من بشتر چيزي ميخوام كه با فلش پلير هفت باشه و اينها بشتر روي فلش پلير هشت مانور داده بودند چون توي ايران مشكل پلير خيلي زياده - اينها هم از سرويس بيتمپ كش فلش هست استفاده كردن اگه در باره اين هم منبعي داري معرفي كن ممنوم --وميخواستم بپرسم كه روي هر سروري كه پي اچ پي ساپورت ميكنه اين كارو باهاش ميشه كرد يا نه ؟؟ بهروز
 
آخرین ویرایش:

phoenix

Member
ببخشید من باز خیلی دیر کردم...
متاسفانه نه source خاصی نمیشناسم، همونطور که قبلا گفتم این کار فقط در flash 8 قابل انجامه مگر اینکه تصویر ایجاد شده خیلی ساده باشه مثل نمونه ای که خود شما فرستادی. احتمالا در برنامه client مشکلی نداری، کلا برنامه ساده ای است و توی پست های قبلی هم درموردش صحبت کردیم. برنامه سرور خیلی خاص تره و کلا برنامه ساده ای نیست، متاسفاده من توی php هم نمی تونم کمکی کنم ولی در مورد اینکه گفتی هر سرور php اینو ساپورت میکنه، فکر میکنم بله البته نسخه های جدید php اگر هم support نکنه میشه کلا remoting component های اونو از سایت amfphp گرفت:

http://www.amfphp.org

در مورد نحوه کار با remoting در php نمیتونم باز کمکی کنم ولی در مورد شمای کلی remoting من قبلا در همین سایت پست هایی داشتم. مثل اینا:

http://forum.majidonline.com/showthread.php?t=11821

http://forum.majidonline.com/showthread.php?t=852&page=2
 

BehrouzPc

پــــادشــاه فــلــــش
آقا خيلي ممنون بدردم خورد ولي باز هم به اون جوابي كه ميخواستم نرسيدم - ولي به هر حال ممنون :d
ولي اگر فلش كاري كه با پي اچ پي خيلي آشنا باشه سراغ داري يه خبري هم به من بده - باز هم ممنون
 

جدیدترین ارسال ها

بالا