6

Я хотел бы создать приложение facebook, подобное nametest или Meww, и почти преуспел в том, чтобы мои вызовы API API Facebook Graph и возвращали данные из facebook. Что меня пугает, является пользовательский интерфейс вышеупомянутых веб-приложений. Когда вы завершаете тест на Meww или Nametests, результат представляется пользователю в формате Image (Jpeg). Я просто не знаю, как им удается конвертировать HTML в изображение на лету со всеми стилями CSS и т. Д. И как они возвращают его пользователю в качестве изображения? Можно ли реализовать этот сценарий на практике в ASP.NET MVC Too? Если да, мне нужен намек.Есть ли способ сделать одно изображение из 3 URL-адресов изображений с помощью asp.net mvc?

Ниже изображено изображение, созданное в результате теста.

enter image description here

Edit: Чтобы быть более конкретными ... У меня есть public async Task<ActionResult> FB_Analyse() действия в моем контроллере, который принимает данные из Facebook через Graph API вызов Facebook, а затем передать значение данных к модель и в то конец действий возвращает представление, как показано ниже:

public async Task<ActionResult> FB_Analyse() 
     { 

      var access_token = HttpContext.Items["access_token"].ToString(); 
      if (!string.IsNullOrEmpty(access_token)) 
      { 

       var appsecret_proof = access_token.GenerateAppSecretProof(); 

       var fb = new FacebookClient(access_token); 

       #region FacebookUser Name and Picture plus other Info 
       //Get current user's profile 
       dynamic myInfo = await fb.GetTaskAsync("me?fields=first_name,last_name,link,locale,email,name,birthday,gender,location,age_range,about".GraphAPICall(appsecret_proof)); 

       dynamic myinfojson = JsonConvert.DeserializeObject(myInfo.ToString()); 

       ViewBag.UserName = myinfojson.name; 
       ViewBag.UserGender = myinfojson.gender; 

       //get current picture 
       dynamic profileImgResult = await fb.GetTaskAsync("{0}/picture?width=200&height=200&redirect=false".GraphAPICall((string)myInfo.id, appsecret_proof)); 

       ViewBag.ProfilePictureURL = profileImgResult.data.url; 

       #endregion 

       dynamic myFeed = await fb.GetTaskAsync(
        ("me/feed?fields=likes{{name,pic_large}}") 
        .GraphAPICall(appsecret_proof)); 
       string result = myFeed.ToString(); 
       var jsonResult = JsonConvert.DeserializeObject<RootObject>(result); 

       var likes = new List<Datum2>(); 

       foreach (var likeitem in jsonResult.data) 
       { 
        if (likeitem.likes != null) 
        { 
         foreach (var feedlikeitem in likeitem.likes.data) 
         { 
          likes.Add(feedlikeitem); 
         } 
        } 
       } 
return view(likes); 
} 

Тогда мой взгляд у меня есть этот простой <div> тег с изображениями, как показано ниже:

<div class="imageWrapper" style="position: relative"> 
<img class="girl img-responsive" src="~/images/TestPictures/mHiDMsL.jpg" style="position: relative; z-index: 1;" /> 
<img src="@ViewBag.Picture" alt=.. width="100" height="100" style="position: absolute;left:80px; top: 80px;z-index: 10;" /> 
<img src="@ViewBag.ProfilePictureURL" alt=.. width="200" height="200" style="position: absolute;left:300px; top: 160px;z-index: 11;" /> 
</div> 

Как вы можете видеть, у меня есть три разных знака <img>. Один из них - фон для двух других изображений, а два других - одно изображение пользователя Facebook, а второе - изображение пользователя пользователя facebook, которое помещено в верхнюю часть фонового изображения. То, что я хочу достичь, ясное, как голубое небо. Я хочу объединить эти три изображения в одном, а затем показать его пользователю как одно изображение.

Помогите, пожалуйста, потеряно.

+1

Это полезно для объединения трех изображений в 1? http://stackoverflow.com/questions/6383123/merge-two-images-to-create-a-single-image-in-c-net – Pete

+0

@ Поймите этот вопрос, они имеют дело с реальными фотографиями, но в моем случае я только имеют URL-адреса изображений, такие как www.somesite.com/images/home.png –

+0

. Ах, вы можете создать изображение с URL-адреса, используя это: http://stackoverflow.com/questions/11801630/how-can-i-convert-image -url-to-system-drawing-image – Pete

ответ

2

SO после много серфинга в сети и глубокий анализ Meaww и Nametests я узнал, что они используют сторонний инструмент для их хостинг изображений и манипуляции, которые Cloudinary.

я отвечаю на свой вопрос так, что любой другой человек, который сталкивается с такой проблемы не должен беспокоить с большим количеством материала и тестирования разных библиотек третьей партии, которая не имеет отношения к проблеме на все поскольку я много боролся с тем же.

позволяет сделать некоторые пункты о Cloudinary первой: Cloudinary является облачным сервисом на основе, которая обеспечивает решение управления изображениями от конца до конца, включая загрузки, хранение, манипуляцию, оптимизацию и доставку.

С помощью Cloudinary вы можете легко загружать изображения в облако, автоматически выполнять интеллектуальные манипуляции без установки какого-либо сложного программного обеспечения. Все ваши изображения затем легко доставляются через быстрый CDN, оптимизируются и используют лучшие отраслевые практики. Cloudinary предлагает комплексные API-интерфейсы и возможности администрирования и легко интегрируется с новыми и существующими веб-и мобильными приложениями.

Cloudinary предлагает SDK и поддержку различных технологий программирования, включая .Net, PHP, Java, Rubby и т.д ...

Есть некоторые другие услуги, аналогичные Cloudinary как Blitline но хорошая вещь о Cloudinary является то, что эта услуга для обоих программистов и не-программисты. Если кто-то не имеет опыта программирования, он все равно может воспользоваться этой услугой. Поскольку он предоставляет пользователям очень интеллектуальную панель управления.

Я думаю, что я уже сделал слишком много очков, так что пришло время получить немного практического ответа на вопрос.

Для обработки вышеуказанной проблемы мы должны получить пакет nuget CloudinaryDotNet с следующей командой через консоль диспетчера пакетов.

Install - Package CloudinaryDotNet

После установки пакета мы можем создать экземпляр наших API вызовы к Cloudinary услуг. Примечание: 1-й. Мы должны сделать учетную запись Cloudinary. К счастью, Cloudinary предлагает бесплатную учетную запись без ограничения по времени. 2-й. Настройте свою учетную запись Cloudinary в рамках вашего проекта .Net.

using CloudinaryDotNet; 
using CloudinaryDotNet.Actions; 
Account account = new Account(
"my_cloud_name", // Upon creating account you'll be given a cloud name. 
"my_api_key", // Your API Key/Id. 
"my_api_secret"); // Your App Secret. 

Cloudinary cloudinary = new Cloudinary(account); 

Image Загрузить с Cloudinary: Для того, чтобы иметь возможность манипулировать изображения изображение должно быть уже загружены в вашем Cloudinary счета. Это можно сделать непосредственно из Cloudinary приборной панели или программно с вашего веб-приложения, как показано ниже:

var uploadParams = new ImageUploadParams() 
       { 
        File = new FileDescription("File Path or Directly for a URL"), 
        PublicId = "sample_id",// each image on the server should be named differently if this option is not assigned cloudinary will automatically assign one to it. 
        Tags = "Tags for Images", 
       }; 
var uploadParamsResult= cloudinary.Upload(uploadParams); // this line will upload image to the cloudinary server. 

Когда все выше установлен на месте, а затем манипулировать изображения с Cloudinary просто как:

Вы можете управлять/преобразовать любое изображение: 1. Расположено на другом изображении. 2. Поместите эффект, как «сепия». 3. Наложить его текстом a Изображения и many подробнее. Ниже приведен простой пример:

@Model.Api.UrlImgUp.Transform(new Transformation().Width("700").Height("370") 
.Effect("sepia").Width("200").Height("200").Crop("thumb").Gravity("face").Radius("max").Overlay("image1").Gravity("west").Y(18).X(20) 
     .Chain().Width("150").Height("150").Crop("fill").Radius("20").Border(4, "#553311").Overlay("image2").Gravity("east").Y(18).X(20)).BuildImageTag("Background_Pic") 

И, честно говоря, для меня это все.