Как получить размеры фото

  • Автор темы Автор темы JanCarlo
  • Дата начала Дата начала

JanCarlo

Client
Регистрация
04.03.2018
Сообщения
376
Реакции
40
Баллы
28
Добрый день!

есть список ссылок на фотки, ссылки прямые, нужно узнать точные размеры фоток (ширина и высота) в пикселях, и далее занести ширину и высоту в две переменные.

1) как сделать это Не скачивая фотку на комп
2) и как это сделать скачав фотку на комп =)

заранее спасибо
 
1) никак
2)
C#:
Развернуть Свернуть Копировать
string path = project.Variables["Get_Otvet_n_Jpg"].Value; // Путь к файлу
Image img = Image.FromFile(path);
project.Variables["Img_Widhth"].Value = img.Width.ToString();
project.Variables["Img_Height"].Value = img.Height.ToString();

//return img.Size; // Ширина x Высота
// или
//return img.Width; // Ширина
//return img.Height; // Высота
 
Добрый день!

1) как сделать это Не скачивая фотку на комп

Можно качать, но не сохранять фотку на комп

Код:
Развернуть Свернуть Копировать
     Image img = null; 
               string image =  project.Variables["imageUrl"].Value;    //Ссылка на картинку
                try
                {
                    WebClient wc = new WebClient();
                    byte[] bytes = wc.DownloadData(image);
                    MemoryStream ms = new MemoryStream(bytes);
                    img = System.Drawing.Image.FromStream(ms);
                    project.Variables["width"].Value = img.Width.ToString();
                    project.Variables["height"].Value = img.Height.ToString();
                  
                }
                catch
                {
                  
                }
 
1) никак
2)
C#:
Развернуть Свернуть Копировать
string path = project.Variables["Get_Otvet_n_Jpg"].Value; // Путь к файлу
Image img = Image.FromFile(path);
project.Variables["Img_Widhth"].Value = img.Width.ToString();
project.Variables["Img_Height"].Value = img.Height.ToString();

//return img.Size; // Ширина x Высота
// или
//return img.Width; // Ширина
//return img.Height; // Высота
Спасибо большое, все работает
 
Последнее редактирование:
Я уже привык, что в моих руках код не работает. Как именно надо написать, чтобы смотреть размер изображения?
Нужно возвращать в какую-нибудь переменную? Как это делать? А то я фигурные скобочки даже не умею поставить.
Код:
Развернуть Свернуть Копировать
string path = project.Variables["Get_Otvet_n_Jpg"].Value; // Путь к файлу
Image img = Image.FromFile(path);
project.Variables["Img_Widhth"].Value = img.Width.ToString();
project.Variables["Img_Height"].Value = img.Height.ToString();
return img.Size; // Ширина x Высота
 
Я уже привык, что в моих руках код не работает. Как именно надо написать, чтобы смотреть размер изображения?
Нужно возвращать в какую-нибудь переменную? Как это делать? А то я фигурные скобочки даже не умею поставить.
Код:
Развернуть Свернуть Копировать
string path = project.Variables["Get_Otvet_n_Jpg"].Value; // Путь к файлу
Image img = Image.FromFile(path);
project.Variables["Img_Widhth"].Value = img.Width.ToString();
project.Variables["Img_Height"].Value = img.Height.ToString();
return img.Size; // Ширина x Высота

а что не записывает высоту и ширину разве в твоём примере ?
 
Вот уже догадался создать переменные Img_Widhth и Img_Height , догадался что путь к файлу должен вести на диск С:, не Url.
Теперь сработало. Сегодня вроде уже не сломаю, а завтра опять вспоминать, как сделал. Так что подсказки ещё могут понадобиться.

Я ж не догадался поначалу переменные создать )) Я с кодом ещё не дружу ну совсем.

Код:
Развернуть Свернуть Копировать
string path = project.Variables["PathToTheDiskC:File"].Value; // Путь к файлу
Image img = Image.FromFile(path);
project.Variables["Img_Widhth"].Value = img.Width.ToString();
project.Variables["Img_Height"].Value = img.Height.ToString();
 
Последнее редактирование:
  • Спасибо
Реакции: Alex.A и termit
Сейчас буду мучительно Img_Widhth и Img_Height перемножать, т.к. хочу сделать проверку изображение весом не больше 1 млн байт. Или их не перемножают. Блин, не знаю ((

А как, собственно, проверить, чтобы размеры изображений были не больше 1 млн байт?
Изображения я уже собрал себе на комп.
Img_Size или ширину с длиной найду, шаблончик, перебирающий все мои изображения сделать сделаю, но как отсеивать изображения больше 1 млн байт — не пойму толком.

Ушёл гуглить запрос "размер и вес изображения".
 
Можно качать, но не сохранять фотку на комп

Код:
Развернуть Свернуть Копировать
     Image img = null;
               string image =  project.Variables["imageUrl"].Value;    //Ссылка на картинку
                try
                {
                    WebClient wc = new WebClient();
                    byte[] bytes = wc.DownloadData(image);
                    MemoryStream ms = new MemoryStream(bytes);
                    img = System.Drawing.Image.FromStream(ms);
                    project.Variables["width"].Value = img.Width.ToString();
                    project.Variables["height"].Value = img.Height.ToString();
              
                }
                catch
                {
              
                }
Не работает, видимо что-то не хватает.
C#:
Развернуть Свернуть Копировать
Компиляция кода  Ошибка в действии "CS0246" "The type or namespace name 'WebClient' could not be found (are you missing a using directive or an assembly reference?)". [Строка: 4; Cтолбец: 40]

upd:

Нужно было Директива using добавить код:
C#:
Развернуть Свернуть Копировать
using System.Web;
using System.Net;
 
Последнее редактирование:
Не работает, видимо не хватает dll, подскажите пожалуйста
C#:
Развернуть Свернуть Копировать
Компиляция кода  Ошибка в действии "CS0246" "The type or namespace name 'WebClient' could not be found (are you missing a using directive or an assembly reference?)". [Строка: 4; Cтолбец: 40]
using System.Net;
 
  • Спасибо
Реакции: kagorec
Не работает, видимо не хватает dll, подскажите пожалуйста
66446

Скачивание картинки без сохранения в файл и вывод ширины/высоты в лог:
Развернуть Свернуть Копировать
string url = @"https://zennolab.com/discussion/data/avatars/m/11/11375.jpg?1446968218"; // путь к картинке
string proxy = ""; // прокси
string[] headers = new[]{string.Empty};
byte[] imgbytes = ZennoPoster.HTTP.RequestBytes(
    method:ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET,
    url:url,
    content:"",
    contentPostingType:"",
    proxy:proxy,
    AdditionalHeaders: headers,
    cookieContainer: project.Profile.CookieContainer); // скачиваем в массив байт

int width = -1; // переменная для хранения ширины
int height = -1; // переменная для хранения высоты
using (MemoryStream ms = new MemoryStream(imgbytes)){ // забрасываем массив байт в поток
    Image img = Image.FromStream(ms); // Создаем картинку с потока
    width = img.Width; // Определяем ширину картинки
    height = img.Height; // определяем высоту картинки
}

project.SendInfoToLog(string.Format(@"width={0} heidht={0}",width, height)); // выводим в лог результат
 
  • Спасибо
Реакции: eee, termit и kagorec
Можно качать, но не сохранять фотку на комп

Код:
Развернуть Свернуть Копировать
     Image img = null;
               string image =  project.Variables["imageUrl"].Value;    //Ссылка на картинку
                try
                {
                    WebClient wc = new WebClient();
                    byte[] bytes = wc.DownloadData(image);
                    MemoryStream ms = new MemoryStream(bytes);
                    img = System.Drawing.Image.FromStream(ms);
                    project.Variables["width"].Value = img.Width.ToString();
                    project.Variables["height"].Value = img.Height.ToString();
               
                }
                catch
                {
               
                }
Подскажите что не так в снипете?
С обычными форматами работает, но если картинка webp то не понимает. Высота и ширина пустые в итоге
 
Последнее редактирование:
Посмотреть вложение 66446
Скачивание картинки без сохранения в файл и вывод ширины/высоты в лог:
Развернуть Свернуть Копировать
string url = @"https://zennolab.com/discussion/data/avatars/m/11/11375.jpg?1446968218"; // путь к картинке
string proxy = ""; // прокси
string[] headers = new[]{string.Empty};
byte[] imgbytes = ZennoPoster.HTTP.RequestBytes(
    method:ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET,
    url:url,
    content:"",
    contentPostingType:"",
    proxy:proxy,
    AdditionalHeaders: headers,
    cookieContainer: project.Profile.CookieContainer); // скачиваем в массив байт

int width = -1; // переменная для хранения ширины
int height = -1; // переменная для хранения высоты
using (MemoryStream ms = new MemoryStream(imgbytes)){ // забрасываем массив байт в поток
    Image img = Image.FromStream(ms); // Создаем картинку с потока
    width = img.Width; // Определяем ширину картинки
    height = img.Height; // определяем высоту картинки
}

project.SendInfoToLog(string.Format(@"width={0} heidht={0}",width, height)); // выводим в лог результат

Здравствуйте, позвольте пару нубских вопросов по этому коду.

1. У меня почему-то всегда ширина равна высоте (даже если это не так). Т.е. width вычисляется правильно, а дальше height всегда равна width (хотя это не всегда так). В вашем примере картинка действительно квадратная, но как другие считает? Это у меня что-то не так?

2. Урл картинки у меня хранится в переменной в Зеннопостере, как мне его использовать в этом коде?

3. Как результат (ширину и высоту) положить в 2 переменные в Зеннопостер?
 
Последнее редактирование:
Здравствуйте, позвольте пару нубских вопросов по этому коду.

1. У меня почему-то всегда ширина равна высоте (даже если это не так).
2. Урл картинки у меня хранится в переменной в Зеннопостере, как мне его использовать в этом коде?
3. Как результат (ширину и высоту) положить в 2 переменные в Зеннопостер?
Ошибка только в выводе в лог, в реальности считает нормально.
есть: project.SendInfoToLog(string.Format(@"width={0} heidht={0}",width, height));
надо project.SendInfoToLog(string.Format(@"width={0} heidht={1}",width, height));



98743


Добавил ниже с выводом в переменные и получением пути с переменной.
C#:
Развернуть Свернуть Копировать
string url = project.Variables["url"].Value; // путь к картинке https://i.ibb.co/sgs0qMm/img.jpg
string proxy = ""; // прокси
string[] headers = new[]{string.Empty};
byte[] imgbytes = ZennoPoster.HTTP.RequestBytes(
    method:ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET,
    url:url,
    content:"",
    contentPostingType:"",
    proxy:proxy,
    AdditionalHeaders: headers,
    cookieContainer: project.Profile.CookieContainer); // скачиваем в массив байт

int width = -1; // переменная для хранения ширины
int height = -1; // переменная для хранения высоты
using (MemoryStream ms = new MemoryStream(imgbytes)){ // забрасываем массив байт в поток
    Image img = Image.FromStream(ms); // Создаем картинку с потока
    width = img.Width; // Определяем ширину картинки
    height = img.Height; // определяем высоту картинки
}

project.Variables["width"].Value = width.ToString();
project.Variables["height"].Value =  height.ToString();
project.SendInfoToLog(string.Format(@"width={0} heidht={1}",width, height)); // выводим в лог результат
 
  • Спасибо
Реакции: Garry Potter и Alexmd
Работает, большое спасибо!
 
  • Спасибо
Реакции: BAZAg
Если этот код будет использоваться внутри Зенно, то нужно не забыть ещё память очистить.
В 19 строке пометил строчку которую ещё необходимо добавить.
Без этой строчки могут быть проблемы с памятью (я ведь не знаю в сколько потоков будет выполняться данное действие и сколько ещё времени будет работать шаблон после выполнения данного кубика).
Работает, большое спасибо!
C#:
Развернуть Свернуть Копировать
string url = project.Variables["url"].Value; // путь к картинке
string proxy = ""; // прокси
string[] headers = new[]{string.Empty};
byte[] imgbytes = ZennoPoster.HTTP.RequestBytes(
    method:ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET,
    url:url,
    content:"",
    contentPostingType:"",
    proxy:proxy,
    AdditionalHeaders: headers,
    cookieContainer: project.Profile.CookieContainer); // скачиваем в массив байт

int width = -1; // переменная для хранения ширины
int height = -1; // переменная для хранения высоты
using (MemoryStream ms = new MemoryStream(imgbytes)){ // забрасываем массив байт в поток
    Image img = Image.FromStream(ms); // Создаем картинку с потока
    width = img.Width; // Определяем ширину картинки
    height = img.Height; // определяем высоту картинки
    img.Dispose();
}

project.Variables["width"].Value = width.ToString();
project.Variables["height"].Value =  height.ToString();
project.SendInfoToLog(string.Format(@"width={0} heidht={1}",width, height)); // выводим в лог результат
 
  • Спасибо
Реакции: Garry Potter
Если этот код будет использоваться внутри Зенно, то нужно не забыть ещё память очистить.
В 19 строке пометил строчку которую ещё необходимо добавить.
Без этой строчки могут быть проблемы с памятью (я ведь не знаю в сколько потоков будет выполняться данное действие и сколько ещё времени будет работать шаблон после выполнения данного кубика).

C#:
Развернуть Свернуть Копировать
string url = project.Variables["url"].Value; // путь к картинке
string proxy = ""; // прокси
string[] headers = new[]{string.Empty};
byte[] imgbytes = ZennoPoster.HTTP.RequestBytes(
    method:ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET,
    url:url,
    content:"",
    contentPostingType:"",
    proxy:proxy,
    AdditionalHeaders: headers,
    cookieContainer: project.Profile.CookieContainer); // скачиваем в массив байт

int width = -1; // переменная для хранения ширины
int height = -1; // переменная для хранения высоты
using (MemoryStream ms = new MemoryStream(imgbytes)){ // забрасываем массив байт в поток
    Image img = Image.FromStream(ms); // Создаем картинку с потока
    width = img.Width; // Определяем ширину картинки
    height = img.Height; // определяем высоту картинки
    img.Dispose();
}

project.Variables["width"].Value = width.ToString();
project.Variables["height"].Value =  height.ToString();
project.SendInfoToLog(string.Format(@"width={0} heidht={1}",width, height)); // выводим в лог результат
Здравствуйте.
Подскажите, можно ли еще улучшить ваш код, уточнив юзер-агент, который будет обращаться к картинке?
Например, нужно, чтобы обращался такой юзер-агент:
TelegramBot (like TwitterBot)
 
Здравствуйте.
Подскажите, можно ли еще улучшить ваш код, уточнив юзер-агент, который будет обращаться к картинке?
Например, нужно, чтобы обращался такой юзер-агент:
TelegramBot (like TwitterBot)
Попробуйте добавить параметр, должно сработать:
C#:
Развернуть Свернуть Копировать
byte[] imgbytes = ZennoPoster.HTTP.RequestBytes(
    method:ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET,
    url:url,
    content:"",
    contentPostingType:"",
    proxy:proxy,
    UserAgent: "TelegramBot (like TwitterBot)",
    AdditionalHeaders: headers,
    cookieContainer: project.Profile.CookieContainer);
 
  • Спасибо
Реакции: Garry Potter
Подскажите что не так в снипете?
С обычными форматами работает, но если картинка webp то не понимает. Высота и ширина пустые в итоге
Не нашли решение? Сейчас столкнулся с этой же проблемой. Jpg, jpeg считает нормально, а webp не хочет. Как решить? :bn:
 
Не нашли решение? Сейчас столкнулся с этой же проблемой. Jpg, jpeg считает нормально, а webp не хочет. Как решить? :bn:
Немного искал, не нашел
п.с. тогда еще ChatGPT небыло)
Попробуйте с помощью ImageMagick
* Не забудьте подключить через GAC подходящую для ZP.

Получить размеры:
Развернуть Свернуть Копировать
using (MagickImage image = new MagickImage(imgbytes))
{
    width = image.Width;
    height = image.Height;
}
 
1) никак
2)
C#:
Развернуть Свернуть Копировать
string path = project.Variables["Get_Otvet_n_Jpg"].Value; // Путь к файлу
Image img = Image.FromFile(path);
project.Variables["Img_Widhth"].Value = img.Width.ToString();
project.Variables["Img_Height"].Value = img.Height.ToString();

//return img.Size; // Ширина x Высота
// или
//return img.Width; // Ширина
//return img.Height; // Высота

Здравствуйте. Всё пытаюсь заставить этот код работать, но ничего не работает, уже не понимаю, что не так. Буду крайне признателен, если подскажете, в чем заключается моя проблема. В лог выдается ошибка
Выполнение действия CSharp OwnCode. (путь к файлу)

UPD: Проблему решил, прощу прощения за беспокойство)
 

Вложения

  • 111.png
    111.png
    197,1 KB · Просмотры: 143
  • 111.png
    111.png
    197,1 KB · Просмотры: 140
Последнее редактирование:
Экшен: Свой код C#
C#:
Развернуть Свернуть Копировать
var IMG_PATH = '/.... Путь до файла или переменная Zenno'
var size = System.Drawing.Image.FromFile(IMG_PATH).Size;
return size;

Результат:
{Width=1200, Height=900}

Для того, чтобы вернуть отдельно ширину или высотку в return передаём size.Width или size.Height, соответственно :dm:
 
Обновление снипета C# из первых сообщений, теперь с поддержкой webp

C#:
Развернуть Свернуть Копировать
SixLabors.ImageSharp.Image<Rgba32> img = null;
string image = project.Variables["img_url"].Value; // Ссылка на картинку
try
{
    WebClient wc = new WebClient();
    byte[] bytes = wc.DownloadData(image);
    using (MemoryStream ms = new MemoryStream(bytes))
    {
        // Загрузка изображения через ImageSharp (поддержка webp, jpg, png, gif и др.)
        img = SixLabors.ImageSharp.Image.Load<Rgba32>(ms);

        // Получаем ширину и высоту изображения
        project.Variables["imgwidth"].Value = img.Width.ToString();
        project.Variables["imgheight"].Value = img.Height.ToString();
    }
}
catch (Exception ex)
{
    // Логирование ошибки или обработка исключения
    project.SendErrorToLog("Ошибка загрузки изображения: " + ex.Message);
}
 
Последнее редактирование модератором:
  • Спасибо
Реакции: djaga и Sergodjan

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)