Sayfayı Yazdır | Pencereyi Kapat

Category Resmi ekleme

Nereden Yazdırıldığı: Clomosy | Forum
Kategori: Genel Programlama
Forum Adı: Clomosy ile değişken kullanımı
Forum Tanımlaması: TRObject dili ile değişken tanımlaması ve ekranda gösterme
URL: https://forum.clomosy.com.tr/forum_posts.asp?TID=1203
Tarih: 16 Aralık 2025 Saat 21:13
Program Versiyonu: Web Wiz Forums 12.07 - https://www.webwizforums.com


Konu: Category Resmi ekleme
Mesajı Yazan: M-Guney
Konu: Category Resmi ekleme
Mesaj Tarihi: 06 Ekim 2025 Saat 15:17
Ben ERP projesinde kullanmak için telefondan ImageChooser ile eklenmiş olan fotoğrafı API aracılığıyla serverda tutup daha sonrasında kullamak istiyorum.

ImageChooser da proImage kullanımına izin vermiyor verseydi 
CameraImg.clProSettings.PictureSource şeklinde almayı planlıyordum ben bu resmi nasıl api aracılığıyla veri tabanına yollayabilirim.



Cevaplar:
Mesajı Yazan: M-Guney
Mesaj Tarihi: 06 Ekim 2025 Saat 15:39
void onbtnClick;
{
try
    Clomosy.ImageChooser(Form1, CameraImg2);
    CameraImg2.Bitmap.SaveToStream(MemStream);
    noteMemo.Lines.Text = MemStream.AsBase64;
    // Image içindeki resmi okuyup base 64 çevirip db ye yaz
except
ShowMessage('Exception Class: '+LastExceptionClassName+' Exception Message: '+LastExceptionMessage);
}


Mesajı Yazan: M-Guney
Mesaj Tarihi: 06 Ekim 2025 Saat 15:40
https://resmim.net/i/jrRglK%20" rel="nofollow - https://resmim.net/i/jrRglK



Mesajı Yazan: Emr.Erkmn
Mesaj Tarihi: 06 Ekim 2025 Saat 18:11
Merhaba Güney, 
2 farklı prosedür örneği göndereceğim, inceledikten sonra benzer hata alırsan tekrar bakalım. 
1) 
void gorselYuklendi;
var
  base64Image: string;
  apiUrl: string;
  RequestBody: string;
  tempPath: string;
  FileStream: TclMemoryStream;
{
  FileStream = TCLMemoryStream.Create;
CameraImg.Bitmap.SaveToStream(FileStream); 
  base64Image = Clomosy.StreamToBase64(FileStream);

  apiUrl = 'kendi api keyin' + API_KEY;

  RequestBody = '{
    "requests": [
      {
        "image": {
          "content": "' + base64Image + '"
        },
        "features": [
          {
            "type": "DOCUMENT_TEXT_DETECTION",
            "maxResults": 10
          }
        ]
      }
    ]
  }';

  try
    RestCreate(apiUrl, RequestBody);
  except
    ShowMessage('Görsel verisi hazırlanırken hata oluştu: ' + LastExceptionMessage);
  }
}
*************************
2) 
void Stream2Base64;
var
  clMemoryStream:TCLMemoryStream;
{
  // Save Img To File
  clMemoryStream=TCLMemoryStream.Create;
  try
    CameraImg.Bitmap.SaveToStream(clMemoryStream);
    base64Image = Clomosy.StreamToBase64(cLMemoryStream);
  except
    base64Image = '';
  }
}
Resmi SQL'e update için; 
  CLQuery.FieldByName('Resim_Yolu').AsString = base64Image;





Mesajı Yazan: M-Guney
Mesaj Tarihi: 07 Ekim 2025 Saat 13:49
Bu şekilde yaptım fakat resmin bouyutuna göre çalışma süresi max 13sn min 1sn olarak test ettim daha nasıl azaltabilirim. Ayrıca kullanıcıya ERP de kullanmak üzere resim yükletirken kaç mb sınır koyulamlı max değer kaç olmalı şuanlık middleware ile kategori max 15mb ürünler max 20mb olarak kontrol ediyorum.


var
  Form1 : TCLForm;
  //noteMemo : TclMemo;
  SourceImg : TCLImage;
  EdtCName : TclProEdit;

  CameraBtn, SaveBtn:TclButton;
  CameraImg: TCLImage;
  ImageStr : String;
//SaveBtn
void AddCategory
var 
  output: String;
  MemStream:TCLMemoryStream;
{
  try
    
    MemStream = TCLMemoryStream.Create;
    CameraImg.Bitmap.SaveToStream(MemStream);
    ImageStr =  Clomosy.StreamToBase64(MemStream);
    
    clRest.BaseURL = ''MY_ADDRESSS/addcategory';
    clRest.Accept = 'application/json';
    clRest.Method = rmPOST;//post
    if(EdtCName.Text ==''){
      ShowMessage('Lütfen gerekli kısımları doldurun.')
    }else{
      clRest.AddBody(
      '{"category_name" : "'+EdtCName.Text+'", "category_image" :'+'"'+ ImageStr +'"}',
      'application/json');
      
      // ÇALIŞMIYOR HEADER İS NOT WORKİNG
      
      //clRest.AddHeader('Authorization','eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjo1MSwiZW1haWwiOiJtdWhhbW1lZHlhemlsaW1AZ21haWwuY29tIiwicm9sZV9pZCI6MSwiaWF0IjoxNzU5NzU4MTQ1LCJleHAiOjE3NTk3NjE3NDV9.IwjYTHC0YZo2XrYCgBrzhPYq1eDU-dzKRHZ073Bxrro');
      clRest.Execute;
      output = clRest.Response;
      ShowMessage(output);
      
    } 
  except
  ShowMessage('Exception Class: '+LastExceptionClassName+' Exception Message: '+LastExceptionMessage);
  }
}

//Choose Image
void onbtnClick; // Resim Seç 
{
  try
      Clomosy.ImageChooser(Form1, CameraImg);
  except
  ShowMessage('Exception Class: '+LastExceptionClassName+' Exception Message: '+LastExceptionMessage);
  }
}


// Resmi getir kontrol et
/*
 void memoBase64ToStreamClick;
 {
  try 
    clRest=TCLRest.Create;   
    clRest.BaseURL = 'MY_ADDRESSS/category-image/8';
    clRest.Accept = 'image/png'; // Eğer ki resim png değil JPEG  olsa bile resmi getirir.
    clRest.Method = rmGET;
    clRest.Execute;
    SourceImg.Bitmap.LoadFromStream(clRest.StreamResponse);
  except
  ShowMessage('Exception Class: '+LastExceptionClassName+' Exception Message: '+LastExceptionMessage);
  }
}*/

 
 //------ Main Code ------
 {
   Form1 = TCLForm.Create(Self);

   clRest=TCLRest.Create;
   /*
   noteMemo = Form1.AddNewMemo(Form1,'noteMemo','---');
   noteMemo.Align = alMostTop;
   noteMemo.Height = 50;
   noteMemo.StyledSettings = ssFamily;
   noteMemo.TextSettings.WordWrap = True;
   Form1.AddNewEvent(noteMemo,tbeOnClick,'memoBase64ToStreamClick');
   */
 
  SourceImg = Form1.AddNewImage(Form1,'SourceImg');
  SourceImg.Height = 300;
  SourceImg.Width = 300;
  SourceImg.Align = alClient;
  Form1.setImage(SourceImg,' https://clomosy.com/learn/clomosy.png" rel="nofollow - https://clomosy.com/learn/clomosy.png ');
   
  EdtCName = Form1.AddNewProEdit(Form1,'EdtCName', 'Kategori ismini giriniz..');
  EdtCName.Align = alTop;
  EdtCName.Width = 370;
  EdtCName.Height = 30;
  EdtCName.Margins.Top = 10;
  EdtCName.Margins.Left = 10;
  EdtCName.Margins.Right = 10;
  EdtCName.clProSettings.FontColor = clAlphaColor.clHexToColor('#808080');
  EdtCName.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#ebebeb');
  EdtCName.clProSettings.BorderColor = clAlphaColor.clHexToColor('#000000');
  EdtCName.clProSettings.BorderWidth = 2;
  EdtCName.clProSettings.FontSize = 40;
  EdtCName.clProSettings.FontVertAlign = palcenter;
  EdtCName.clProSettings.FontHorzAlign = palcenter;
  EdtCName.clProSettings.TextSettings.Font.Style = [fsBold];
  EdtCName.clProSettings.IsFill = True; 
  EdtCName.clProSettings.IsRound = True;
  EdtCName.clProSettings.RoundHeight = 10;
  EdtCName.clProSettings.RoundWidth = 10;
  EdtCName.SetclProSettings(EdtCName.clProSettings);
   
  CameraBtn = Form1.AddNewButton(Form1, 'CameraBtn','Resim Seç');
  Form1.AddNewEvent(CameraBtn, tbeOnClick, 'onbtnClick');
  CameraBtn.Align = alBottom;
  
  SaveBtn = Form1.AddNewButton(Form1, 'SaveBtn','KAYDET');
  Form1.AddNewEvent(SaveBtn, tbeOnClick, 'AddCategory');
  SaveBtn.Align = alBottom;
 
  CameraImg = Form1.AddNewImage(Form1, 'CameraImg');
  CameraImg.Height = 300;
  CameraImg.Width = 300;
  CameraImg.Align = alCenter;
   
   Form1.Run;
 }



Mesajı Yazan: Emr.Erkmn
Mesaj Tarihi: 07 Ekim 2025 Saat 14:24
Güney  kodlama da  boyut kontrolü için;
Bu prosedürü kullanabilirsin;
void CheckImageSize 
  var
    MemStream: TCLMemoryStream;
    fileSize: Integer;
{
  {
    MemStream = TCLMemoryStream.Create;
    CameraImg.Bitmap.SaveToStream(MemStream);
    fileSize = MemStream.Size;
    

    if (fileSize > 3145728) {
      ShowMessage('Resim çok büyük! Maksimum 3MB olmalı.');
      ShowMessage('Mevcut boyut: ' + IntToStr(fileSize div 1024 div 1024) + 'MB');
      Exit;
    }
    
    ImageStr = Clomosy.StreamToBase64(MemStream);
    MemStream.Free;
  }
}




Mesajı Yazan: Emr.Erkmn
Mesaj Tarihi: 07 Ekim 2025 Saat 14:32
var
  Form1: TCLForm;
  SourceImg: TCLImage;
  EdtCName: TclProEdit;
  CameraBtn, SaveBtn: TclButton;
  CameraImg: TCLImage;
  ImageStr: String;
  clRest: TclRest;
  statusLabel: TclProLabel;

void CheckImageSize 
  var
    MemStream: TCLMemoryStream;
    fileSize: Integer;
    fileSizeMB: Double;
{
  
    MemStream = TCLMemoryStream.Create;
    CameraImg.Bitmap.SaveToStream(MemStream);
    fileSize = MemStream.Size;
    fileSizeMB = fileSize / 1024 / 1024;
    
    // 3MB = 3145728 bytes
    if (fileSize > 3145728) {
      ShowMessage('Resim çok büyük! Maksimum 3MB olmalı.');
      ShowMessage('Mevcut boyut: ' + FloatToStr(fileSizeMB) + 'MB');
      MemStream.Free;
      Exit;
    }
    
    statusLabel.Text = 'Resim boyutu: ' + FloatToStr(fileSizeMB) + 'MB';
    MemStream.Free;
  
}





void OnRestCompleted 
  {
    ShowMessage('İşlem tamamlandı: ' + clRest.Response);
  }


void AddCategory 
  var 
    output: String;
    MemStream: TCLMemoryStream;
{
  
    try 
      
      // Resim boyutunu kontrol et
      CheckImageSize;
      
    
      
      // REST işlemi
      clRest.BaseURL = 'MY_ADDRESSS/addcategory';
      clRest.Accept = 'application/json';
      clRest.Method = rmPOST;
      clRest.ConnectTimeOut = 30000; // 30 saniye timeout
      
      if (EdtCName.Text == '') {
        ShowMessage('Lütfen gerekli kısımları doldurun.');
      } else {
        clRest.AddBody(
          '{"category_name" : "' + EdtCName.Text + '", "category_image" : "' + ImageStr + '"}',
          'application/json'
        );
        
        // Asenkron çalıştır
        clRest.OnCompleted = 'OnRestCompleted';
        clRest.ExecuteAsync;
      }
      
     except 
      ShowMessage('Exception Class: ' + LastExceptionClassName + ' Exception Message: ' + LastExceptionMessage);
    
  }
}

void onbtnClick 
  {
    try 
      // Resim seç
      Clomosy.ImageChooser(Form1, CameraImg);
      
      // Seçim sonrası hemen kontrol et
      CheckImageSize;
      
     except 
      ShowMessage('Exception Class: ' + LastExceptionClassName + ' Exception Message: ' + LastExceptionMessage);
    
  }
}

// Resmi getir kontrol et
void memoBase64ToStreamClick 
  {
    try 
      clRest = TCLRest.Create;   
      clRest.BaseURL = 'MY_ADDRESSS/category-image/8';
      clRest.Accept = 'image/png';
      clRest.Method = rmGET;
      clRest.Execute;
      SourceImg.Bitmap.LoadFromStream(clRest.StreamResponse);
     except 
      ShowMessage('Exception Class: ' + LastExceptionClassName + ' Exception Message: ' + LastExceptionMessage);
    
  }
}

{
  Form1 = TCLForm.Create(Self);
  Form1.SetFormColor('#085e26', '#4dcc1e', clGHorizontal);
  Form1.clSetCaption('Kategori Ekleme');
  Form1.clSetWindowState(fwsMaximized);

  clRest = TCLRest.Create;
  
  // Status Label
  statusLabel = Form1.AddNewProLabel(Form1, 'statusLabel', 'Resim seçiniz...');
  statusLabel.Align = alMostTop;
  statusLabel.Height = 30;
  statusLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#ffffff');
  statusLabel.clProSettings.FontSize = 16;
  statusLabel.clProSettings.TextSettings.Font.Style = [fsBold];
  statusLabel.SetclProSettings(statusLabel.clProSettings);
  
  
  // Source Image
  SourceImg = Form1.AddNewImage(Form1, 'SourceImg');
  SourceImg.Height = 200;
  SourceImg.Width = 200;
  SourceImg.Align = alTop;
  SourceImg.Margins.Top = 10;
  SourceImg.Margins.Left = 10;
  SourceImg.Margins.Right = 10;
  Form1.setImage(SourceImg, ' https://clomosy.com/learn/clomosy.png" rel="nofollow - https://clomosy.com/learn/clomosy.png ');
  
  // Edit
  EdtCName = Form1.AddNewProEdit(Form1, 'EdtCName', 'Kategori ismini giriniz..');
  EdtCName.Align = alTop;
  EdtCName.Width = 370;
  EdtCName.Height = 50;
  EdtCName.Margins.Top = 10;
  EdtCName.Margins.Left = 10;
  EdtCName.Margins.Right = 10;
  EdtCName.clProSettings.FontColor = clAlphaColor.clHexToColor('#808080');
  EdtCName.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#ebebeb');
  EdtCName.clProSettings.BorderColor = clAlphaColor.clHexToColor('#000000');
  EdtCName.clProSettings.BorderWidth = 2;
  EdtCName.clProSettings.FontSize = 18;
  EdtCName.clProSettings.FontVertAlign = palcenter;
  EdtCName.clProSettings.FontHorzAlign = palcenter;
  EdtCName.clProSettings.TextSettings.Font.Style = [fsBold];
  EdtCName.clProSettings.IsFill = True; 
  EdtCName.clProSettings.IsRound = True;
  EdtCName.clProSettings.RoundHeight = 10;
  EdtCName.clProSettings.RoundWidth = 10;
  EdtCName.SetclProSettings(EdtCName.clProSettings);
  
  // Camera Button
  CameraBtn = Form1.AddNewButton(Form1, 'CameraBtn', 'RESİM SEÇ');
  Form1.AddNewEvent(CameraBtn, tbeOnClick, 'onbtnClick');
  CameraBtn.Align = alBottom;
  CameraBtn.Height = 50;
  CameraBtn.Margins.Bottom = 10;
  CameraBtn.Margins.Left = 10;
  CameraBtn.Margins.Right = 10;
  
  // Save Button
  SaveBtn = Form1.AddNewButton(Form1, 'SaveBtn', 'KAYDET');
  Form1.AddNewEvent(SaveBtn, tbeOnClick, 'AddCategory');
  SaveBtn.Align = alBottom;
  SaveBtn.Height = 50;
  SaveBtn.Margins.Bottom = 10;
  SaveBtn.Margins.Left = 10;
  SaveBtn.Margins.Right = 10;
  
  // Camera Image
  CameraImg = Form1.AddNewImage(Form1, 'CameraImg');
  CameraImg.Height = 300;
  CameraImg.Width = 300;
  CameraImg.Align = alCenter;
  CameraImg.Margins.Top = 10;
  CameraImg.Margins.Bottom = 10;
  
  Form1.Run;
}


Mesajı Yazan: Emr.Erkmn
Mesaj Tarihi: 07 Ekim 2025 Saat 14:48
. Ayrıca kullanıcıya ERP de kullanmak üzere resim yükletirken kaç mb sınır koyulamlı max değer kaç olmalı şuanlık middleware ile kategori max 15mb ürünler max 20mb olarak kontrol ediyorum. 

Sorunun cevabı ise;
Bu biraz tercih meselesi, sunucu gücü, yükü, kullanıcı sayısı vs gibi etkenler etkiler. 
Genel olarak bir sınır koymak mantıklı



Sayfayı Yazdır | Pencereyi Kapat

Forum Software by Web Wiz Forums® version 12.07 - https://www.webwizforums.com
Copyright ©2001-2024 Web Wiz Ltd. - https://www.webwiz.net