PDA

View Full Version : کمک برای استخراج thumbnail فایل‌های Revit



bababarghi
سه شنبه 10 فروردین 1395, 00:16 صبح
دوستان عزیز با عرض سلام.

من تخصص چندانی در زمینه برنامه نویسی ندارم اما فکر می کنم از عهده این کار بربیام. فقط نیاز به راهنمایی های اولیه دارم.

من حدود ۷۰۰۰ تا فایل Revit دارم (برنامه Revit برای مدلسازی ساختمان استفاده میشه و پسوند فایل هاش RVT و RFA هست) که نیاز دارم thumbnail اونها رو استخراج کنم. ویندوز این فایل ها رو native خودش نمی دونه و لذا thumbs.db رو براشون نمی سازه اما موقع نصب برنامه Revit یه handler هم برای نمایش thumbnail ها نصب می شه. عکس زیر رو ببینید:

139762


من یک وبسایت پیدا کردم که ظاهرا راه حل رو گفته اما از اونجایی که گفتم برنامه نویس نیستم متوجه منطور نویسنده نمی شم. کسی می تونه کمکی بکنه؟


http://thebuildingcoder.typepad.com/blog/2009/06/rvt-and-rfa-thumbnail-image.html


متشکرم

Reza-HNA
سه شنبه 10 فروردین 1395, 07:12 صبح
یک نمونه از RVT و RFA رو که دارید آپلود کنید ببینم پیشنمایش ها چطوری در فایل ذخیره شده. طوری که من میبینم ، فکر کنم باید کار ساده ای باشه!

bababarghi
سه شنبه 10 فروردین 1395, 08:07 صبح
یک نمونه از RVT و RFA رو که دارید آپلود کنید ببینم پیشنمایش ها چطوری در فایل ذخیره شده. طوری که من میبینم ، فکر کنم باید کار ساده ای باشه!

سپاس از توجهتون.

یک نمونه فایل خدمت شما:

لینک مستقیم هست

http://fs2.filegir.com/asghar56/LD_FrenchDoors_Timber_2_light_over_panel_with_side lights.rfa

نکته: پیش‌نمایش فقط در windows explorer قابل مشاهده هست. اگه از نرم افزار های مدیریت فایل استفاده می کنید، thumbnail ی نخواهید دید.

توی همون لینکی که در پست اول اشاره کردم، نویسنده گفته که تونسته با نرم‌افزار DocFile Viewer که مربوط به ویندوز ۳.۱ هست (!) ساختار فایل رو ببینه:

139769

Reza-HNA
سه شنبه 10 فروردین 1395, 09:52 صبح
خب من به فایل یه نگاه انداختم ، فایل ساختار ساده ای داره و پیش نمایش رو در خودش ذخیره میکنه ، که خوشبختانه پیش نمایش رو به صورت Jpeg هم ذخیره میکنه که کار رو خیلی ساده میکنه. پیش نمایش ها در سایز 128x128 ذخیره میشن و همیشه سایز ثابت هست.
راه حل های مختلفی رو میتونید در برنامه نویسی استفاده کنید که یکیش رو در همون لینکی که گزاشتید توضیح داده که استفاده از تابع IExtractImage از کتابخونه shell32.dll هست که البته من تا حالا باهاش کار نکردم ، ولی راه پیشنهادیه من اینه که فایل رو به صورت هگز بخونید و فایل jpeg رو ازش استخراج کنید.
شما اگر فایل های RFA یا RVT رو با 7zip هم باز کنید ساختار رو میتونید ببینید توی عکسی که خودتون هم گزاشتید پیش نمایش در سکشن RevitPreview4.0 ذخیره میشه که اگر با 7zip استخراجش کنید و 240 بایت اول رو که اضافی هست رو پاک کنید فایل jpeg یا پیش نمایش بدست میاد .
برای مثال فایلی که خودتون گزاشتید :
فایل RFA یا RVT رو با یک هگز ادیتور باز کنید و کلمه JFIF رو سرچ کنید (کلمه JFIF در هدر همه فایل های jpg وجود داره) میتونید محل شروع فایل jpg رو پیدا کنید. خب اگر از بایت های شروع تا بایت های پایانی رو انتخاب و در یک فایل جدید بریزید میتونید فایل jpeg رو استخراج کنید. (فایل jpg یا بایت FF D8 شروع و با بایت های FF D9 تموم میشه )
برای مثال فایلی که خودتون گزاشتید :

http://www.8pic.ir/images/uoz0faq97hal185c2fsk_thumb.jpg (http://www.8pic.ir/images/uoz0faq97hal185c2fsk.jpg)

و نتیجه ای که میگیریم :
http://www.8pic.ir/images/hdysoyifmtjrnpo5k1nt.jpg

* و یه سوال ! حداکثر حجم فایل های RVT و RFA چقدره ؟ بیشتر از 30 مگابایت هستش؟
اینا فقط توضیحات بودن برای درک راه حل ، یکم پیچیدست و منم خوب توضیح ندادم ، متاسفانه الان خونه نیستم نمیتونم برنامه ای بنویسم ، رسیدم یک نمونه مینویسم .
موفق باشید .

bababarghi
چهارشنبه 11 فروردین 1395, 08:18 صبح
خب من به فایل یه نگاه انداختم ، فایل ساختار ساده ای داره و پیش نمایش رو در خودش ذخیره میکنه ، که خوشبختانه پیش نمایش رو به صورت Jpeg هم ذخیره میکنه که کار رو خیلی ساده میکنه. پیش نمایش ها در سایز 128x128 ذخیره میشن و همیشه سایز ثابت هست.
راه حل های مختلفی رو میتونید در برنامه نویسی استفاده کنید که یکیش رو در همون لینکی که گزاشتید توضیح داده که استفاده از تابع IExtractImage از کتابخونه shell32.dll هست که البته من تا حالا باهاش کار نکردم ، ولی راه پیشنهادیه من اینه که فایل رو به صورت هگز بخونید و فایل jpeg رو ازش استخراج کنید.
شما اگر فایل های RFA یا RVT رو با 7zip هم باز کنید ساختار رو میتونید ببینید توی عکسی که خودتون هم گزاشتید پیش نمایش در سکشن RevitPreview4.0 ذخیره میشه که اگر با 7zip استخراجش کنید و 240 بایت اول رو که اضافی هست رو پاک کنید فایل jpeg یا پیش نمایش بدست میاد .
برای مثال فایلی که خودتون گزاشتید :
فایل RFA یا RVT رو با یک هگز ادیتور باز کنید و کلمه JFIF رو سرچ کنید (کلمه JFIF در هدر همه فایل های jpg وجود داره) میتونید محل شروع فایل jpg رو پیدا کنید. خب اگر از بایت های شروع تا بایت های پایانی رو انتخاب و در یک فایل جدید بریزید میتونید فایل jpeg رو استخراج کنید. (فایل jpg یا بایت FF D8 شروع و با بایت های FF D9 تموم میشه )
برای مثال فایلی که خودتون گزاشتید :

http://www.8pic.ir/images/uoz0faq97hal185c2fsk_thumb.jpg (http://www.8pic.ir/images/uoz0faq97hal185c2fsk.jpg)

و نتیجه ای که میگیریم :
http://www.8pic.ir/images/hdysoyifmtjrnpo5k1nt.jpg

* و یه سوال ! حداکثر حجم فایل های RVT و RFA چقدره ؟ بیشتر از 30 مگابایت هستش؟
اینا فقط توضیحات بودن برای درک راه حل ، یکم پیچیدست و منم خوب توضیح ندادم ، متاسفانه الان خونه نیستم نمیتونم برنامه ای بنویسم ، رسیدم یک نمونه مینویسم .
موفق باشید .


بسیار بسیار ممنونم از لطف تون. اینی که شما گفتی احتمالا از سطح برنامه نویسی من بالاتره ! و دست شما رو می بوسه. حجم هر فایل به صورت مجزا زیر ۹ مگ هه.

ممنون می شم اگه یه برنامه کوچولو برام بنویسی که این فایل های JPEG رو برام استخراج کنه :خجالت:

Reza-HNA
چهارشنبه 11 فروردین 1395, 14:05 عصر
خب ، نوشتنمش.
فقط مجبور شدم از 7zip استفاده کنم چون فایل های Rvit فشرده شدن نیازه که اول دیکمپرس بشن بعد ازش پیشنمایش رو استخراج کنیم.


http://8pic.ir/images/6yzcok5kk41ctrdqsx3l.png


برنامه رو همراه با سورس کد ضمیمه کردم هم به زبان Vb.net و هم #C ، هر جا مشکل داشتی توی کدش بگو تا راهنمایی کنم.
البته خودم برنامه رو با vb.net نوشتم چون دردسرش کمتره و زودتر میشه نوشت :لبخند:

139787

bababarghi
چهارشنبه 11 فروردین 1395, 20:56 عصر
خب ، نوشتنمش.
فقط مجبور شدم از 7zip استفاده کنم چون فایل های Rvit فشرده شدن نیازه که اول دیکمپرس بشن بعد ازش پیشنمایش رو استخراج کنیم.


http://8pic.ir/images/6yzcok5kk41ctrdqsx3l.png


برنامه رو همراه با سورس کد ضمیمه کردم هم به زبان Vb.net و هم #C ، هر جا مشکل داشتی توی کدش بگو تا راهنمایی کنم.
البته خودم برنامه رو با vb.net نوشتم چون دردسرش کمتره و زودتر میشه نوشت :لبخند:

139787


واقعا نمی دونم چطور باید تشکر کنم از لطف تون. بسیار زحمت کشیدین.

فقط یه مشکلی دارم: برای فایل زیر error‌می گیرم.


http://www.mediafire.com/download/678sj6u8jwi4jhu/LD_FrenchDoors_1Light_with_LouvreSidelights_plus_H ighlight.rfa

ارور ی که می گیرم اینه:


http://axgig.com/images/93558519082805531482.jpg


حدس می‌زنم بخاطر اینه که شما فرض کردید تمام thumbnail ها JPG هستند. اما من تو اینترنت می خوندم که این thumbnail ها با فرمت PNG‌ذخیره میشن. ممکنه یه بررسی بفرمایید ببینید مشکل از کجاست؟:ناراحت:

Reza-HNA
چهارشنبه 11 فروردین 1395, 21:38 عصر
آو!
خب آره من فکر میکردم همه فایل های Revit پیشنمایش همشون Jpeg هست برای همین برنامه ارور میده ، چون نمیتونه فایل jpg رو داخل فایل پیدا کنه! این فایلی رو که دادید الان نگاه کردم متفاوت با 2 تا فایلیه که من داشتم ، این یکی با PNG ذخیره شده .
ارور هم اینجا رخ میده که فایل رو بایت بایت میخونه ببینه کدوم بایت معادل 216 میشه ولی چون Jpeg وجود نداره به انتهای آرایه که میرسه چون i+1 میشه یکی از اندازه خود آرایه بزرگتر میشه و ارور index was outside the bounds... رو میده.
فردا اگر وقت شد و عمری باقی موند یه تابع PNG هم مینویسم اضافه میکنم .
موفق باشید...

bababarghi
چهارشنبه 11 فروردین 1395, 23:04 عصر
یه‌نکته رو‌بگم شاید کار راحت تر بشه (شاید)

من نیازی به اون پنجره و‌لود شدن عکس ها ندارم ! بجاش اگه بشه با حالت drag and drop فولدرم رو بندازم روی فرم و برنامه فقط برام thumbnails ها رو‌کنار فایلش ذخیره کنه، کافیه
منظورم اینه اگه برنامه مثل یه لوپ recursive عمل کنه خیلی عالی میشه

(با عرض شرمندگی فراوان برای اضافه کردن اینگونه خرده فرمایشات 😓)