6

Chciałbym zbudować aplikację na facebooku podobną do nametest lub Meaww i prawie udało mi się uzyskać moje wywołania API do interfejsu API Graph API i zwrócić dane z Facebooka. Co mnie denerwuje to interfejs użytkownika wspomnianych aplikacji internetowych. Po zakończeniu testu na Meaww lub Nametests wynik jest reprezentowany dla użytkownika w formacie obrazu (Jpeg). Po prostu nie wiem, w jaki sposób uda im się przekonwertować HTML na obraz w locie z wszystkimi stylami CSS i itp. Oraz jak zwracają je użytkownikowi jako obrazowi? Czy można zastosować ten scenariusz w praktyce w ASP.NET MVC Too? Jeśli tak, potrzebuję podpowiedzi, aby to zrobić.Czy jest mimo to zrobić jeden obraz z 3 adresów URL obrazu przy użyciu asp.net mvc?

Poniżej znajduje się obraz wygenerowany przez Meaww w wyniku testu.

enter image description here

Edit: Aby być bardziej szczegółowe ... Mam public async Task<ActionResult> FB_Analyse() działania w moim kontroler, który pobiera dane z facebook poprzez wywołanie Graph API do Facebooka, a następnie przekazać te dane do wartości Model i na koniec działania następnie zwraca się widok jak poniżej:

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); 
} 

wtedy moim zdaniem mam to prosty <div> tag z obrazami, jak poniżej:

<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> 

Jak widać, mam trzy różne tagi <img>. Jednym z nich jest tło dla dwóch innych obrazów, a dwa pozostałe to jedno zdjęcie użytkownika Facebooka, a drugie zdjęcie użytkownika Facebooka, które umieszczone są na górze obrazu tła. To, co chcę osiągnąć, jest jasne jak niebieskie niebo. Chcę połączyć te trzy obrazy w jednym, a następnie pokazać je użytkownikowi jako jednemu obrazowi.

Proszę o pomoc, jestem zagubiony.

+1

Czy to jest przydatne do łączenia 3 obrazów w 1? http://stackoverflow.com/questions/6383123/merge-two-images-to-create-a-single-image-in-c-net – Pete

+0

@Pobierz to pytanie, które mają do czynienia z prawdziwymi obrazami, ale w moim przypadku tylko mieć adresy URL obrazów, takie jak www.somesite.com/images/home.png –

+0

Ach, możesz utworzyć obraz z adresu URL, korzystając z poniższego adresu: http://stackoverflow.com/questions/11801630/how-can-i-convert-image -url-to-system-drawing-image – Pete

Odpowiedz

2

Po dużo surfowania po sieci i głębokiej analizie Meaww i Nametests Dowiedziałem się, że używają narzędzia innej firmy do przechowywania i manipulowania obrazami, które jest Cloudinary.

mam odpowiedzi na moje własne pytanie, tak że każda inna osoba, która stoi przed taką problemu nie powinno być jedno z wielu rzeczy i testowanie różnych bibliotek stron trzecich, które nie odnoszą się do problemu w ogóle jako że walczyłem z tym samym.

Pozwala zrobić kilka punktów o Cloudinary pierwsze: Cloudinary jest usługą w chmurze, która dostarcza rozwiązania do zarządzania obraz end-to-end w tym przesyłania, magazynowania, manipulacji, optymalizacje i dostawy.

Dzięki Cloudinary możesz łatwo przesłać obrazy do chmury, automatycznie wykonywać inteligentne operacje na obrazach bez instalowania skomplikowanego oprogramowania. Wszystkie twoje obrazy są następnie bezproblemowo dostarczane za pośrednictwem szybkiej sieci CDN, zoptymalizowanej i wykorzystującej najlepsze praktyki branżowe. Cloudinary oferuje wszechstronne interfejsy API i funkcje administracyjne oraz jest łatwa do zintegrowania z nowymi i istniejącymi aplikacjami internetowymi i mobilnymi.

Cloudinary oferuje SDK i wsparcie dla różnych technologii programistycznych w tym .Net, PHP, Java, Rubby i etc ...

Istnieje kilka innych usług podobnych do Cloudinary jak Blitline ale dobrą rzeczą Cloudinary jest to, że usługa jest zarówno dla programistów i nie-programistów. Oznacza to, że jeśli ktoś nie ma doświadczenia w programowaniu, nadal może korzystać z tej usługi. Zapewnia użytkownikom bardzo inteligentny pulpit nawigacyjny.

Myślę, że już zrobiłem zbyt wiele punktów, więc nadszedł czas, aby uzyskać nieco praktycznego rozwiązania, aby odpowiedzieć na pytanie.

Aby obsłużyć powyższy problem, musimy pobrać pakiet nuget CloudinaryDotNet z następującym poleceniem za pośrednictwem konsoli Menedżera pakietów.

Install - Package CloudinaryDotNet

Po zainstalowaniu pakietu możemy instancję nasze wywołań API do Cloudinary usług. Uwaga: 1st. Musimy założyć konto Cloudinary. Na szczęście Cloudinary oferuje bezpłatne konto bez limitu czasowego. 2nd. Skonfiguruj swoje konto Cloudinary w swoim projekcie Cloudinary.

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); 

Załaduj obraz z Cloudinary: Aby móc manipulować obrazy obrazy powinny być zamieszczone już na swoim koncie Cloudinary. Można to zrobić bezpośrednio z Cloudinary desce rozdzielczej lub programowo z aplikacji internetowych, jak poniżej:

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. 

Kiedy wszystko powyżej jest na miejscu, a następnie manipuluje obrazy z Cloudinary jest proste:

Można manipulować/przekształcić dowolny obraz na: 1. Umieszczony na innym obrazie. 2. Umieść efekt podobny do "sepii". 3. Nakładaj na niego tekstem Obrazy i many więcej. Poniżej znajduje się prosty przykład:

@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") 

I szczerze dla mnie to wszystko.