بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

قرار دادن عکس در دیتا بیس

مدیریت گفتگو
peyman1104 11 سال پیش
آخرین تغییر: 11 سال پیش

با سلام یه سوال دارم ایا عکسهارو تو دیتابیس قرار بدیم  کار منطقی هست یا نه بهترین راه چیه ممنون اگه اموزش اون رو بگید

نظرات

ابراهیم 11 سال پیش
سوال خوبیه این سوال منم هست که اطلاعاتی مانند عکس و یا فیلم و یا صفحات html را ایا می توان درون دیتابیس قرار داد و اگر جواب اری است چگونه؟ ایا تفاوتی با اطلاعاتی مانند تکست دارد و یا خیر یه لایک هم برای پیمان به خاطر سوال خوبش.
peyman1104 11 سال پیش
سلام کسی دوست نداره جواب سوال ما رو بده ؟
کاشی زاده 11 سال پیش
نه ، بهترین کار نگه داری آدرس تصاویر در دیتابیس و ذخیره فایل ها در حافظه دستگاه است .
ابراهیم 11 سال پیش
در مورد اپلیکیشن هایی که دیتا بیسشون انلاین هست این روند چه جوری اقای کاشیزاده ؟ به طور مثال وقتی فردی وارد یک صفحه می شه که حاوی تکست و تصویر هست در همان لحظه تکست از دیتا بیس سمت سرور گرفته می شود و روی دیتا بیس گوشی ذخیره می شود و عکس هم دانلود می شود و در یک فولدر قرار می گیرد و نمایش داده می شود؟ یا راه حل بهتری هم هست؟
peyman1104 11 سال پیش
سلام ممنون از دوستان که جواب می دید اقای محمد حسین میشه اموزش کامل ادرس دادن تصاویر در دیتا بیس رو بدید
کاشی زاده 11 سال پیش
آموزش خاصی نداره شما آدرس تصاویر رو در یک جدول از دیتابیس نگه داری میکنید و موقع نیاز استفاده .
peyman1104 11 سال پیش
اقای محمد حسین مثلا من یه عکس دارم داخل پوشه drawable حالا اگه بخوام ادرس بهش بدم چجوریه؟

پاسخ‌ها 4

msadesign 11 سال پیش

سلام تصویر رو میشه به صورت آرایه داخل دیتابیس ذخیره کرد.ولی خب چه کاریه آخه

دقیقا همین سئوال تو یکی از مصاحبه هایی که تا حالا داشتم ازم پرسیدن؟

طرف خیلی جدی بهم گفت تصاویر رو تو دیتابیس ذخیره کنیم بهتره منم یکم بهش نگاه کردم گفتم مگه داریم چنین چیزی اونم گیر داده بود که داریم من گفتم اصلا نوع داده ای تصویر تو دیتابیس نیست که یهو یادم افتاد تو دوران دانشجویی یه مقاله خونده بودم که تصویر یک آرایه از پیکسل هاست ولی کاری کاملا احمقانه است که بخوای تصاویر رو توی دیتابیس ذخیره کنی.

نظرات

BrotherV 11 سال پیش

تصویر را میشه به صورت Blob در دیتابیس ذخیره کرد فقط کافیه در دیتابیس یک Blob تعریف کرد و عکس را بهش Attach کرد. و به صورت زیر هم میشه عکس ذخیره شده در دیتا بیس را فراخوانی کرد.

byte[] pictureBmp = cursor.getBlob(cursor.getColumnIndex("Picture_Table"));
Bitmap bmp = BitmapFactory.decodeByteArray(pictureBmp, 0, pictureBmp.length);
image.setImageBitmap(bmp);
cursor.close();

نظرات

peyman1104 11 سال پیش
ایا عکس ذخیره شده در دیتا بیس کار درسی هست یا نه اقای کاشانی گفتن که ادرس عکس رو بدید تو دیتابیس بهتره الان من دنبال اینم چطور ادرس عکس رو بدم تو دیتا بیس و چطوری فراخوانی کننم ممنون
BrotherV 11 سال پیش
آدرس عکس را میتونید به صورت تکست در دیتابیس قرار بدید و به صورت (آدرس ذخیره شده)img.setImageResource میتونید عکس را نمایش بدید. بستگی داره منظور از عکس چی باشه. تصاویر یا همون asset های برنامه که برای دکمه یا ابزارها استفاده میکنید بهتره در دیتابیس نباشه اما تصاویر دیگه را میتونید ذخیره کنید. این بستگی به خودتون و برنامتون داره.
peyman1104 11 سال پیش
اولا ممنون که جواب منو می دید منظور من اینه چند تا عکس تو پوشه دروابل دارم مثلا a1,a2,a3 حالا چطوری ادرس اینهارو به دیتابیس بدم و چطوری تو برنامم فراخوانی شون کنم
BrotherV 11 سال پیش

امیدوارم که منظور شما را درست فهمیده باشم. اگر میخواهید آدرس فقط چند تا تصویر را داشته باشید اصلا پیشنهاد خوبی نیست که از دیتابیس برای اینکار استفاده کنید.  اما من راه استفاده از دیتابیس را هم میگم. روش اول استفاده از کلاس سراسری یا همون G هست. شما میتونید آدرس تصاویر را در یک آرایه از نوع int قرار بدید و هر جا که خواستید فراخوانی کنید.

 public class G extends Application {
    public static final int[] ITEM_DRAWABLES = { R.drawable.facebook,
	    R.drawable.twitter, R.drawable.flickr, R.drawable.instagram,
	    R.drawable.skype, R.drawable.github };

	    .
	    .
}

public class ActivityMain extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        	super.onCreate(savedInstanceState);
	        setContentView(R.layout.activity_main);
	
	        ImageView img = (ImageView) findViewById(R.id.img1);
	        img.setImageResource(G.ITEM_DRAWABLES[0]);
	
	    }
}

در روش دوم آدرس را به صورت رشته اون هم به صورت زیر در دیتابیس قرار میدیم.

 String imageUri = "@drawable/myimage1";  // myimage.png تصویر مورد نظر شما خواهد بود
@drawable/myimage2
@drawable/myimage3
ImageUri rowId
drawavle/myimage1@ 1
drawavle/myimage2@ 2
drawavle/myimage3@ 3


این رشته را برای تمامی عکسها به همین نحو در جدول آدرس تصاویر در  دیتابیس قرار میدیم وبرای فراخوانیش هم به صوررت زیر از دیتابیس میخونیم و تصویر را بر روی imageview لود میکنیم.

int row = 1; // اشاره به سطر ی از جدول دارد
String table = "نام جدول تصاویر";
Cursor cursor = myDatabase.rawQuery("select * from " + table
				+ " where rowId=" + row, null);
cursor.moveToFirst();
String imageUri = cursor.getString(cursor.getColumnIndex("ستون آدرس تصاویر"));

int imageResource = getResources().getIdentifier(imageUri, null, getPackageName());
imageview= (ImageView)findViewById(R.id.imageView);
Drawable drawable = getResources().getDrawable(imageResource);
imageView.setImageDrawable(drawable);

 

نظرات

ابراهیم 11 سال پیش
ذخیره ی تصاویر در دیتا بیس چه مواقعی پیشنهاد می شه ؟به طور مثال اگر یک اپ داشته باشیم که در ان یک لیست ویو وجود دارد و در هر یک از ویو ها یک تصویر نشان داده می شود و بعد وارد شدن به ان ویو ما تصاویر و تکست داریم و این تصاویر باید از سرور دریافت شوند شما پیشنهاد می کنید که تصاویر را در یتا بیس سمت سرور تعریف کنیم؟
BrotherV 11 سال پیش
اگر سرور دارید برای کم کردن حجم برنامه بهتره تصاویر و اطلاعات سمت سرور باشه مثل اپ بازار. اما اگر سرور ندارید میتونید در دیتا بیس محلی اطلاعات را تعریف کنید.
ابراهیم 11 سال پیش
سرور دارم و سوال من در مورد بهترین نحوهی دریافت تصاویر از سرور می باشد به طور مثال دریافت تصاویر که در دیتابیس سرور ذخیره شده اند و ذخیره کردن انها در دیتا بیس در گوشی هنگامی که کار بر از انها استفاده میکند و یا اینکه عکس ها در سرور در دیتا بیس دخیره نشوند و تنها زمانی که لازم است توسط گوشی دانلود شوند و در مکانی در گوشی ذخیره شوند به نظر شما کدام یک بهتر است؟
peyman1104 11 سال پیش
نمون اقای BrotherV اما من باز متوجه نشدم چه کار کنم اول باید یه عکس اسمشو داخل دیتابیس بزاریم به این صورت drawavle/myimage1@ باید باشه تو دیتا بیس و در ضمن نوع دیتا که برا دیتا بیس انتخاب می کنیم نوع تکست باشه درسته ؟ اما از این کدها نتونستم استفاده کنم
BrotherV 11 سال پیش
نگاه کنید، اگر فرض کنیم شما بخواید از پوشه drawable یک عکس را بر روی ImageView ست کنید به صورت زیر عمل میکردیم: (img.setImageResouce(R.drawable.myimage1 اما مقدار R.drawable.image1 یک مقدار عددی هست که به آدرس عکس اشاره میکنه و ما نمیدونیم که این آدرس چه عددی هست. هر سری که فایل R تولید میشه مقادیر تغییر میکنن. برای همین اگر بخواید آدرس عکس را ذخیره کنید به صورت (نام عکس/drawable@) را در دیتابیس ذخیره میکنیم و مقدار تکست را برمیگردونیم و در متغیر imgUri قرار میدیم. سپس آدرس عکس را در متغیر imageResource که از جنس int هست قرار میدیم. و در نهایت عکس موجود در پوشه drawable را در متغیری از نوع drawable قرار میدیم و بر روی imageView عکس را ست میکنیم.
BrotherV 11 سال پیش
نگاه کنید، اگر فرض کنیم شما بخواید از پوشه drawable یک عکس را بر روی ImageView ست کنید به صورت زیر عمل میکردیم: (img.setImageResouce(R.drawable.myimage1 اما مقدار R.drawable.image1 یک مقدار عددی هست که به آدرس عکس اشاره میکنه و ما نمیدونیم که این آدرس چه عددی هست. هر سری که فایل R تولید میشه مقادیر تغییر میکنن. برای همین اگر بخواید آدرس عکس را ذخیره کنید به صورت (نام عکس/drawable@) را در دیتابیس ذخیره میکنیم و مقدار تکست را برمیگردونیم و در متغیر imgUri قرار میدیم. سپس آدرس عکس را در متغیر imageResource که از جنس int هست قرار میدیم. و در نهایت عکس موجود در پوشه drawable را در متغیری از نوع drawable قرار میدیم و بر روی imageView عکس را ست میکنیم.
peyman1104 11 سال پیش

سلام مهندس این کد ها رو کجا بزارم  String imageUri ="@drawable/myimage1" تصویر مورد نظر شما خواهد بود و کد زیر رو کجا بزارم تو کلاس دیتابیس یا جای دیگه ؟و منظور شما از  myDatabas  اینه همون اسم دیتابس هست که من mydb گرفتم تو کلاس دیتابیس؟

 int row =1;// اشاره به سطر ی از جدول داردString table ="نام جدول تصاویر";Cursor cursor = myDatabase.rawQuery("select * from "+ table
				+" where rowId="+ row,null);
cursor.moveToFirst();String imageUri = cursor.getString(cursor.getColumnIndex("ستون آدرس تصاویر"));int imageResource = getResources().getIdentifier(imageUri,null, getPackageName());
imageview=(ImageView)findViewById(R.id.imageView);Drawable drawable = getResources().getDrawable(imageResource);
imageView.setImageDrawable(drawable);

 

نظرات

peyman1104 11 سال پیش
کسی راهنمای کنه ممنون
peyman1104 11 سال پیش
راهنمایی بیشتر می خوامم ممنون
BrotherV 11 سال پیش
این کد را نیاز نیست جایی بزارید این فقطط نشوندهنده اینه که ادرس‌به صورت رشته باید به این صورت باشه و myDatabase همون mydb شما هست.شما یک بار بدون دیتابیس یک رشته به صورت فوق در برنامتون بزارید و عکس را لود کنید بعد از موفق شدن دیتابیس را اعمال کنید.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .